| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of vmservice; | 5 part of vmservice; |
| 6 | 6 |
| 7 class Message { | 7 class Message { |
| 8 final Completer _completer = new Completer.sync(); | 8 final Completer _completer = new Completer.sync(); |
| 9 bool get completed => _completer.isCompleted; | 9 bool get completed => _completer.isCompleted; |
| 10 /// Future of response. | 10 /// Future of response. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 } | 55 } |
| 56 } | 56 } |
| 57 | 57 |
| 58 dynamic toJson() { | 58 dynamic toJson() { |
| 59 return { | 59 return { |
| 60 'path': path, | 60 'path': path, |
| 61 'params': params | 61 'params': params |
| 62 }; | 62 }; |
| 63 } | 63 } |
| 64 | 64 |
| 65 // Calls toString on all non-String elements of [list]. We do this so all |
| 66 // elements in the list are strings, making consumption by C++ simpler. |
| 67 // This has a side effect that boolean literal values like true become 'true' |
| 68 // and thus indistinguishable from the string literal 'true'. |
| 69 List _makeAllString(List list) { |
| 70 if (list == null) { |
| 71 return null; |
| 72 } |
| 73 for (var i = 0; i < list.length; i++) { |
| 74 if (list[i] is String) { |
| 75 continue; |
| 76 } |
| 77 list[i] = list[i].toString(); |
| 78 } |
| 79 return list; |
| 80 } |
| 81 |
| 65 Future<String> send(SendPort sendPort) { | 82 Future<String> send(SendPort sendPort) { |
| 66 final receivePort = new RawReceivePort(); | 83 final receivePort = new RawReceivePort(); |
| 67 receivePort.handler = (value) { | 84 receivePort.handler = (value) { |
| 68 receivePort.close(); | 85 receivePort.close(); |
| 69 if (value is Exception) { | 86 if (value is Exception) { |
| 70 _completer.completeError(value); | 87 _completer.completeError(value); |
| 71 } else { | 88 } else { |
| 72 _completer.complete(value); | 89 _completer.complete(value); |
| 73 } | 90 } |
| 74 }; | 91 }; |
| 75 var keys = params.keys.toList(growable:false); | 92 var keys = _makeAllString(params.keys.toList(growable:false)); |
| 76 var values = params.values.toList(growable:false); | 93 var values = _makeAllString(params.values.toList(growable:false)); |
| 77 var request = new List(5) | 94 var request = new List(5) |
| 78 ..[0] = 0 // Make room for OOB message type. | 95 ..[0] = 0 // Make room for OOB message type. |
| 79 ..[1] = receivePort.sendPort | 96 ..[1] = receivePort.sendPort |
| 80 ..[2] = (isOld ? path : method) | 97 ..[2] = (isOld ? path : method) |
| 81 ..[3] = keys | 98 ..[3] = keys |
| 82 ..[4] = values; | 99 ..[4] = values; |
| 83 sendIsolateServiceMessage(sendPort, request); | 100 sendIsolateServiceMessage(sendPort, request); |
| 84 return _completer.future; | 101 return _completer.future; |
| 85 } | 102 } |
| 86 | 103 |
| 87 Future<String> sendToVM() { | 104 Future<String> sendToVM() { |
| 88 final receivePort = new RawReceivePort(); | 105 final receivePort = new RawReceivePort(); |
| 89 receivePort.handler = (value) { | 106 receivePort.handler = (value) { |
| 90 receivePort.close(); | 107 receivePort.close(); |
| 91 if (value is Exception) { | 108 if (value is Exception) { |
| 92 _completer.completeError(value); | 109 _completer.completeError(value); |
| 93 } else { | 110 } else { |
| 94 _completer.complete(value); | 111 _completer.complete(value); |
| 95 } | 112 } |
| 96 }; | 113 }; |
| 97 var keys = params.keys.toList(growable:false); | 114 var keys = _makeAllString(params.keys.toList(growable:false)); |
| 98 var values = params.values.toList(growable:false); | 115 var values = _makeAllString(params.values.toList(growable:false)); |
| 99 var request = new List(5) | 116 var request = new List(5) |
| 100 ..[0] = 0 // Make room for OOB message type. | 117 ..[0] = 0 // Make room for OOB message type. |
| 101 ..[1] = receivePort.sendPort | 118 ..[1] = receivePort.sendPort |
| 102 ..[2] = (isOld ? path : method) | 119 ..[2] = (isOld ? path : method) |
| 103 ..[3] = keys | 120 ..[3] = keys |
| 104 ..[4] = values; | 121 ..[4] = values; |
| 105 sendRootServiceMessage(request); | 122 sendRootServiceMessage(request); |
| 106 return _completer.future; | 123 return _completer.future; |
| 107 } | 124 } |
| 108 | 125 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 120 'params': params | 137 'params': params |
| 121 })); | 138 })); |
| 122 } | 139 } |
| 123 } | 140 } |
| 124 | 141 |
| 125 void sendIsolateServiceMessage(SendPort sp, List m) | 142 void sendIsolateServiceMessage(SendPort sp, List m) |
| 126 native "VMService_SendIsolateServiceMessage"; | 143 native "VMService_SendIsolateServiceMessage"; |
| 127 | 144 |
| 128 void sendRootServiceMessage(List m) | 145 void sendRootServiceMessage(List m) |
| 129 native "VMService_SendRootServiceMessage"; | 146 native "VMService_SendRootServiceMessage"; |
| OLD | NEW |