in dwds/lib/src/services/debug_service.dart [205:273]
static Future<DebugService> start(
String hostname,
RemoteDebugger remoteDebugger,
ExecutionContext executionContext,
String tabUrl,
AssetReader assetReader,
LoadStrategy loadStrategy,
AppConnection appConnection,
UrlEncoder urlEncoder,
{void Function(Map<String, dynamic>) onRequest,
void Function(Map<String, dynamic>) onResponse,
bool spawnDds = true,
bool useSse,
ExpressionCompiler expressionCompiler}) async {
useSse ??= false;
var chromeProxyService = await ChromeProxyService.create(
remoteDebugger,
tabUrl,
assetReader,
loadStrategy,
appConnection,
executionContext,
expressionCompiler);
var authToken = _makeAuthToken();
var serviceExtensionRegistry = ServiceExtensionRegistry();
Handler handler;
// DDS will always connect to DWDS via web sockets.
if (useSse && !spawnDds) {
var sseHandler = SseHandler(Uri.parse('/$authToken/\$debugHandler'),
keepAlive: const Duration(seconds: 5));
handler = sseHandler.handler;
unawaited(_handleSseConnections(
sseHandler, chromeProxyService, serviceExtensionRegistry,
onRequest: onRequest, onResponse: onResponse));
} else {
var innerHandler = webSocketHandler(_createNewConnectionHandler(
chromeProxyService, serviceExtensionRegistry,
onRequest: onRequest, onResponse: onResponse));
handler = (shelf.Request request) {
if (!_acceptNewConnections) {
return shelf.Response.forbidden(
'Cannot connect directly to the VM service as a Dart Development '
'Service (DDS) instance has taken control and can be found at '
'$_ddsUri.',
);
}
if (request.url.pathSegments.first != authToken) {
return shelf.Response.forbidden('Incorrect auth token');
}
return innerHandler(request);
};
}
var server = await startHttpServer(hostname, port: 44456);
serveHttpRequests(server, handler, (e, s) {
_logger.warning('Error serving requests', e);
emitEvent(DwdsEvent.httpRequestException('DebugService', '$e:$s'));
});
return DebugService._(
chromeProxyService,
server.address.host,
server.port,
authToken,
serviceExtensionRegistry,
server,
useSse,
spawnDds,
urlEncoder,
);
}