| // Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:dwds/asset_reader.dart'; |
| import 'package:dwds/src/config/tool_configuration.dart'; |
| import 'package:dwds/src/connections/app_connection.dart'; |
| import 'package:dwds/src/services/debug_service.dart'; |
| import 'package:dwds/src/services/web_socket/web_socket_proxy_service.dart'; |
| import 'package:meta/meta.dart'; |
| |
| /// Defines callbacks for sending messages to the connected client. |
| /// Returns the number of clients the request was successfully sent to. |
| typedef SendClientRequest = int Function(Object request); |
| |
| /// WebSocket-based debug service for web debugging. |
| final class WebSocketDebugService extends DebugService<WebSocketProxyService> { |
| WebSocketDebugService._({ |
| required super.serverHostname, |
| required super.ddsConfig, |
| required super.urlEncoder, |
| }) : super( |
| // The web socket debug service doesn't support SSE connections. |
| useSse: false, |
| ); |
| |
| @protected |
| @override |
| Future<void> initialize({required WebSocketProxyService proxyService}) async { |
| await super.initialize(proxyService: proxyService); |
| await serve( |
| handler: initializeWebSocketHandler(proxyService: proxyService), |
| ); |
| } |
| |
| static Future<WebSocketDebugService> start({ |
| required String hostname, |
| required AppConnection appConnection, |
| required AssetReader assetReader, |
| required SendClientRequest sendClientRequest, |
| required DartDevelopmentServiceConfiguration ddsConfig, |
| UrlEncoder? urlEncoder, |
| }) async { |
| final debugService = WebSocketDebugService._( |
| serverHostname: hostname, |
| ddsConfig: ddsConfig, |
| urlEncoder: urlEncoder, |
| ); |
| final webSocketProxyService = await WebSocketProxyService.create( |
| sendClientRequest, |
| appConnection, |
| assetReader.basePath, |
| debugService, |
| ); |
| await debugService.initialize(proxyService: webSocketProxyService); |
| return debugService; |
| } |
| } |