Files
sdk/pkg/dds/lib/src/devtools/devtools_client.dart
T
Emmanuel Pellereau b8c5ecd5aa Revert "[ package:dds ] Add null safety support"
This reverts commit a527411e51.

Reason for revert: depends on package 'devtools_shared' that is not yet migrated.

Original change's description:
> [ package:dds ] Add null safety support
>
> Fixes https://github.com/dart-lang/sdk/issues/45756
>
> TEST=service + DDS tests
>
> Change-Id: I6dd14d7f9fdee479a830c3b053dc3b00aa635202
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/199800
> Commit-Queue: Ben Konyi <bkonyi@google.com>
> Reviewed-by: Devon Carew <devoncarew@google.com>

# Not skipping CQ checks because original CL landed > 1 day ago.

Change-Id: Icdaef3ac55d7ef302acd3f9c2538a41e52e4253a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/200180
Reviewed-by: David Morgan <davidmorgan@google.com>
Commit-Queue: David Morgan <davidmorgan@google.com>
2021-05-17 08:12:20 +00:00

97 lines
2.3 KiB
Dart

// Copyright (c) 2021, 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.
// @dart=2.9
import 'dart:async';
import 'package:json_rpc_2/src/server.dart' as json_rpc;
import 'package:sse/src/server/sse_handler.dart';
import 'package:stream_channel/stream_channel.dart';
import 'server_api.dart';
class LoggingMiddlewareSink<S> implements StreamSink<S> {
LoggingMiddlewareSink(this.sink);
@override
void add(S event) {
print('DevTools SSE response: $event');
sink.add(event);
}
@override
void addError(Object error, [StackTrace stackTrace]) {
print('DevTools SSE error response: $error');
sink.addError(error);
}
@override
Future addStream(Stream<S> stream) {
return sink.addStream(stream);
}
@override
Future close() => sink.close();
@override
Future get done => sink.done;
final StreamSink sink;
}
/// Represents a DevTools client connection to the DevTools server API.
class DevToolsClient {
DevToolsClient.fromSSEConnection(
SseConnection sse,
bool loggingEnabled,
) {
Stream<String> stream = sse.stream;
StreamSink sink = sse.sink;
if (loggingEnabled) {
stream = stream.map<String>((String e) {
print('DevTools SSE request: $e');
return e;
});
sink = LoggingMiddlewareSink(sink);
}
_server = json_rpc.Server(
StreamChannel(stream, sink),
strictProtocolChecks: false,
);
_registerJsonRpcMethods();
_server.listen();
}
void _registerJsonRpcMethods() {
_server.registerMethod('connected', (parameters) {
// Nothing to do here.
});
_server.registerMethod('currentPage', (parameters) {
// Nothing to do here.
});
_server.registerMethod('disconnected', (parameters) {
// Nothing to do here.
});
_server.registerMethod('getPreferenceValue', (parameters) {
final key = parameters['key'].asString;
final value = ServerApi.devToolsPreferences.properties[key];
return value;
});
_server.registerMethod('setPreferenceValue', (parameters) {
final key = parameters['key'].asString;
final value = parameters['value'].value;
ServerApi.devToolsPreferences.properties[key] = value;
});
}
json_rpc.Server _server;
}