blob: 84aafd9642ae3e67867176ff5e4c892f0eed7bf3 [file] [log] [blame]
// Copyright (c) 2016, 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 'dart:async';
import 'dart:io';
import 'vm_service.dart';
/// Connect to the given uri and return a new [VmService] instance.
Future<VmService> vmServiceConnectUri(String wsUri, {Log? log}) async {
return vmServiceConnectUriWithFactory<VmService>(
wsUri,
vmServiceFactory: VmService.defaultFactory,
log: log,
);
}
/// Connect to the given uri and return a new instance of [T], which is
/// constructed by [vmServiceFactory] and may be a subclass of [VmService].
Future<T> vmServiceConnectUriWithFactory<T extends VmService>(
String wsUri, {
required VmServiceFactory<T> vmServiceFactory,
Log? log,
}) async {
final WebSocket socket = await WebSocket.connect(wsUri);
final StreamController<dynamic> controller = StreamController();
final Completer streamClosedCompleter = Completer();
socket.listen(
(data) => controller.add(data),
onDone: () => streamClosedCompleter.complete(),
);
return vmServiceFactory(
inStream: controller.stream,
writeMessage: (String message) => socket.add(message),
log: log,
disposeHandler: () => socket.close(),
streamClosed: streamClosedCompleter.future,
wsUri: wsUri,
);
}