0512b876b3
Change-Id: I6707f593f643fbf1323f4f24bc76a76f66ed7ec5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/205344 Commit-Queue: Devon Carew <devoncarew@google.com> Reviewed-by: Ben Konyi <bkonyi@google.com>
94 lines
2.4 KiB
Dart
94 lines
2.4 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.
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:devtools_shared/devtools_server.dart';
|
|
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';
|
|
|
|
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 as StreamSink<String>),
|
|
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;
|
|
});
|
|
}
|
|
|
|
late json_rpc.Server _server;
|
|
}
|