// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:async'; import 'package:dds/dap.dart' hide DapServer; import '../base/file_system.dart'; import '../base/platform.dart'; import '../debug_adapters/flutter_adapter.dart'; import '../debug_adapters/flutter_adapter_args.dart'; import 'flutter_test_adapter.dart'; /// A DAP server that communicates over a [ByteStreamServerChannel], usually constructed from the processes stdin/stdout streams. /// /// The server is intended to be single-use. It should live only for the /// duration of a single debug session in the editor, and terminate when the /// user stops debugging. If a user starts multiple debug sessions /// simultaneously it is expected that the editor will start multiple debug /// adapters. class DapServer { DapServer( Stream<List<int>> input, StreamSink<List<int>> output, { required FileSystem fileSystem, required Platform platform, this.ipv6 = false, this.enableDds = true, this.enableAuthCodes = true, bool test = false, this.logger, void Function(Object? e)? onError, }) : channel = ByteStreamServerChannel(input, output, logger) { adapter = test ? FlutterTestDebugAdapter( channel, fileSystem: fileSystem, platform: platform, ipv6: ipv6, enableFlutterDds: enableDds, enableAuthCodes: enableAuthCodes, logger: logger, onError: onError, ) : FlutterDebugAdapter( channel, fileSystem: fileSystem, platform: platform, enableFlutterDds: enableDds, enableAuthCodes: enableAuthCodes, logger: logger, onError: onError, ); } final ByteStreamServerChannel channel; late final DartDebugAdapter<FlutterLaunchRequestArguments, FlutterAttachRequestArguments> adapter; final bool ipv6; final bool enableDds; final bool enableAuthCodes; final Logger? logger; void stop() { channel.close(); } }