69 lines
2.0 KiB
Dart
69 lines
2.0 KiB
Dart
// 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/dds.dart' as dds;
|
|
import 'package:meta/meta.dart';
|
|
|
|
import 'common.dart';
|
|
import 'io.dart' as io;
|
|
import 'logger.dart';
|
|
|
|
/// Helper class to launch a [dds.DartDevelopmentService]. Allows for us to
|
|
/// mock out this functionality for testing purposes.
|
|
class DartDevelopmentService {
|
|
DartDevelopmentService({@required this.logger});
|
|
|
|
final Logger logger;
|
|
dds.DartDevelopmentService _ddsInstance;
|
|
|
|
Uri get uri => _ddsInstance.uri;
|
|
|
|
Future<void> get done => _completer.future;
|
|
final Completer<void> _completer = Completer<void>();
|
|
|
|
Future<void> startDartDevelopmentService(
|
|
Uri observatoryUri,
|
|
int hostPort,
|
|
bool ipv6,
|
|
bool disableServiceAuthCodes,
|
|
) async {
|
|
final Uri ddsUri = Uri(
|
|
scheme: 'http',
|
|
host: (ipv6 ?
|
|
io.InternetAddress.loopbackIPv6 :
|
|
io.InternetAddress.loopbackIPv4
|
|
).host,
|
|
port: hostPort ?? 0,
|
|
);
|
|
logger.printTrace(
|
|
'Launching a Dart Developer Service (DDS) instance at $ddsUri, '
|
|
'connecting to VM service at $observatoryUri.',
|
|
);
|
|
try {
|
|
_ddsInstance = await dds.DartDevelopmentService.startDartDevelopmentService(
|
|
observatoryUri,
|
|
serviceUri: ddsUri,
|
|
enableAuthCodes: !disableServiceAuthCodes,
|
|
ipv6: ipv6,
|
|
);
|
|
unawaited(_ddsInstance.done.whenComplete(() {
|
|
if (!_completer.isCompleted) {
|
|
_completer.complete();
|
|
}
|
|
}));
|
|
logger.printTrace('DDS is listening at ${_ddsInstance.uri}.');
|
|
} on dds.DartDevelopmentServiceException catch (e) {
|
|
logger.printTrace('Warning: Failed to start DDS: ${e.message}');
|
|
if (!_completer.isCompleted) {
|
|
_completer.complete();
|
|
}
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<void> shutdown() async => await _ddsInstance?.shutdown();
|
|
}
|