Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a reload handler along with a restart handler #2439

Merged
merged 1 commit into from
May 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 24 additions & 2 deletions dwds/lib/src/dwds_vm_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ typedef VmResponse = Map<String, Object?>;

enum _NamespacedServiceExtension {
extDwdsEmitEvent(method: 'ext.dwds.emitEvent'),
extDwdsReload(method: 'ext.dwds.reload'),
extDwdsRestart(method: 'ext.dwds.restart'),
extDwdsScreenshot(method: 'ext.dwds.screenshot'),
extDwdsSendEvent(method: 'ext.dwds.sendEvent'),
Expand Down Expand Up @@ -77,6 +78,8 @@ class DwdsVmClient {
final requestSink = requestController.sink;
final requestStream = requestController.stream;

final clientCompleter = Completer<VmService>();

_setUpVmServerConnection(
chromeProxyService: chromeProxyService,
debugService: debugService,
Expand All @@ -85,6 +88,7 @@ class DwdsVmClient {
requestStream: requestStream,
requestSink: requestSink,
dwdsStats: dwdsStats,
clientFuture: clientCompleter.future,
);

final client = ddsUri == null
Expand All @@ -97,6 +101,10 @@ class DwdsVmClient {
ddsUri: ddsUri,
);

if (!clientCompleter.isCompleted) {
clientCompleter.complete(client);
}

final dwdsVmClient =
DwdsVmClient(client, requestController, responseController);

Expand Down Expand Up @@ -158,12 +166,14 @@ class DwdsVmClient {
required StreamSink<VmResponse> responseSink,
required Stream<VmRequest> requestStream,
required StreamSink<VmRequest> requestSink,
required Future<VmService> clientFuture,
}) {
responseStream.listen((request) async {
final response = await _maybeHandleServiceExtensionRequest(
request,
chromeProxyService: chromeProxyService,
dwdsStats: dwdsStats,
clientFuture: clientFuture,
);
if (response != null) {
requestSink.add(response);
Expand All @@ -187,15 +197,19 @@ class DwdsVmClient {
VmResponse request, {
required ChromeProxyService chromeProxyService,
required DwdsStats dwdsStats,
required Future<VmService> clientFuture,
}) async {
VmRequest? response;
final method = request['method'];
if (method == _NamespacedServiceExtension.flutterListViews.method) {
response = await _flutterListViewsHandler(chromeProxyService);
} else if (method == _NamespacedServiceExtension.extDwdsEmitEvent.method) {
response = _extDwdsEmitEventHandler(request);
} else if (method == _NamespacedServiceExtension.extDwdsReload.method) {
response = await _extDwdsReloadHandler(chromeProxyService);
} else if (method == _NamespacedServiceExtension.extDwdsRestart.method) {
response = await _extDwdsRestartHandler(chromeProxyService);
final client = await clientFuture;
response = await _extDwdsRestartHandler(chromeProxyService, client);
} else if (method == _NamespacedServiceExtension.extDwdsSendEvent.method) {
response = await _extDwdsSendEventHandler(request, dwdsStats);
} else if (method == _NamespacedServiceExtension.extDwdsScreenshot.method) {
Expand Down Expand Up @@ -265,13 +279,21 @@ class DwdsVmClient {
return {'result': Success().toJson()};
}

static Future<Map<String, Object>> _extDwdsRestartHandler(
static Future<Map<String, Object>> _extDwdsReloadHandler(
ChromeProxyService chromeProxyService,
) async {
await _fullReload(chromeProxyService);
return {'result': Success().toJson()};
}

static Future<Map<String, Object>> _extDwdsRestartHandler(
ChromeProxyService chromeProxyService,
VmService client,
) async {
await _hotRestart(chromeProxyService, client);
return {'result': Success().toJson()};
}

static Future<void> _registerServiceExtensions({
required VmService client,
required ChromeProxyService chromeProxyService,
Expand Down
Loading