| Index: runtime/bin/vmservice/message.dart
|
| diff --git a/runtime/bin/vmservice/message.dart b/runtime/bin/vmservice/message.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..905c311d96b77881ca484678f97105d10d795e05
|
| --- /dev/null
|
| +++ b/runtime/bin/vmservice/message.dart
|
| @@ -0,0 +1,76 @@
|
| +// Copyright (c) 2013, 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.
|
| +
|
| +part of vmservice;
|
| +
|
| +class Message {
|
| + final Completer _completer = new Completer.sync();
|
| + bool get completed => _completer.isCompleted;
|
| + Future get future => _completer.future;
|
| +
|
| + final List<String> path = new List<String>();
|
| + final Map<String, String> parameters = new Map<String, String>();
|
| +
|
| + Message.fromUri(Uri uri) {
|
| + var split = uri.path.split('/');
|
| + if (split.length == 0) {
|
| + setErrorResponse('Invalid uri: $uri.');
|
| + return;
|
| + }
|
| + for (int i = 0; i < split.length; i++) {
|
| + var pathSegment = split[i];
|
| + if (pathSegment == '') {
|
| + continue;
|
| + }
|
| + path.add(pathSegment);
|
| + }
|
| + parameters.addAll(uri.queryParameters);
|
| + }
|
| +
|
| + Message.fromMap(Map map) {
|
| + if (map['path'] != null) {
|
| + path.addAll(map['path']);
|
| + }
|
| + if (map['parameters'] != null) {
|
| + parameters.addAll(map['parameters']);
|
| + }
|
| + }
|
| +
|
| + Map toJson() {
|
| + return {
|
| + 'path': path,
|
| + 'parameters': parameters
|
| + };
|
| + }
|
| +
|
| + Future send(SendPort sendPort) {
|
| + final receivePort = new RawReceivePort();
|
| + receivePort.handler = (value) {
|
| + receivePort.close();
|
| + if (value is Exception) {
|
| + _completer.completeError(value);
|
| + } else {
|
| + _completer.complete(value);
|
| + }
|
| + };
|
| + var keys = parameters.keys.toList();
|
| + var values = parameters.values.toList();
|
| + var request = [path, keys, values];
|
| + sendServiceMessage(sendPort, receivePort, request);
|
| + return _completer.future;
|
| + }
|
| +
|
| + void setResponse(String response) {
|
| + _completer.complete(response);
|
| + }
|
| +
|
| + void setErrorResponse(String error) {
|
| + _completer.complete(JSON.encode({
|
| + 'type': 'Error',
|
| + 'msg': error,
|
| + 'path': path,
|
| + 'parameters': parameters
|
| + }));
|
| + }
|
| +}
|
|
|