| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 library dart._vmservice; | 5 library dart._vmservice; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 import 'dart:convert'; | 9 import 'dart:convert'; |
| 10 import 'dart:isolate'; | 10 import 'dart:isolate'; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 | 109 |
| 110 /// Called to create a temporary directory | 110 /// Called to create a temporary directory |
| 111 typedef Future<Uri> CreateTempDirCallback(String base); | 111 typedef Future<Uri> CreateTempDirCallback(String base); |
| 112 | 112 |
| 113 /// Called to delete a directory | 113 /// Called to delete a directory |
| 114 typedef Future DeleteDirCallback(Uri path); | 114 typedef Future DeleteDirCallback(Uri path); |
| 115 | 115 |
| 116 /// Called to write a file. | 116 /// Called to write a file. |
| 117 typedef Future WriteFileCallback(Uri path, List<int> bytes); | 117 typedef Future WriteFileCallback(Uri path, List<int> bytes); |
| 118 | 118 |
| 119 /// Called to write a stream into a file. |
| 120 typedef Future WriteStreamFileCallback(Uri path, Stream<List<int>> bytes); |
| 121 |
| 119 /// Called to read a file. | 122 /// Called to read a file. |
| 120 typedef Future<List<int>> ReadFileCallback(Uri path); | 123 typedef Future<List<int>> ReadFileCallback(Uri path); |
| 121 | 124 |
| 122 /// Called to list all files under some path. | 125 /// Called to list all files under some path. |
| 123 typedef Future<List<Map<String,String>>> ListFilesCallback(Uri path); | 126 typedef Future<List<Map<String,String>>> ListFilesCallback(Uri path); |
| 124 | 127 |
| 125 /// Hooks that are setup by the embedder. | 128 /// Hooks that are setup by the embedder. |
| 126 class VMServiceEmbedderHooks { | 129 class VMServiceEmbedderHooks { |
| 127 static ServerStartCallback serverStart; | 130 static ServerStartCallback serverStart; |
| 128 static ServerStopCallback serverStop; | 131 static ServerStopCallback serverStop; |
| 129 static CleanupCallback cleanup; | 132 static CleanupCallback cleanup; |
| 130 static CreateTempDirCallback createTempDir; | 133 static CreateTempDirCallback createTempDir; |
| 131 static DeleteDirCallback deleteDir; | 134 static DeleteDirCallback deleteDir; |
| 132 static WriteFileCallback writeFile; | 135 static WriteFileCallback writeFile; |
| 136 static WriteStreamFileCallback writeStreamFile; |
| 133 static ReadFileCallback readFile; | 137 static ReadFileCallback readFile; |
| 134 static ListFilesCallback listFiles; | 138 static ListFilesCallback listFiles; |
| 135 } | 139 } |
| 136 | 140 |
| 137 class VMService extends MessageRouter { | 141 class VMService extends MessageRouter { |
| 138 static VMService _instance; | 142 static VMService _instance; |
| 139 | 143 |
| 140 /// Collection of currently connected clients. | 144 /// Collection of currently connected clients. |
| 141 final Set<Client> clients = new Set<Client>(); | 145 final Set<Client> clients = new Set<Client>(); |
| 142 | 146 |
| 143 /// Collection of currently running isolates. | 147 /// Collection of currently running isolates. |
| 144 RunningIsolates runningIsolates = new RunningIsolates(); | 148 RunningIsolates runningIsolates = new RunningIsolates(); |
| 145 | 149 |
| 146 /// A port used to receive events from the VM. | 150 /// A port used to receive events from the VM. |
| 147 final RawReceivePort eventPort; | 151 final RawReceivePort eventPort; |
| 148 | 152 |
| 149 final _devfs = new DevFS(); | 153 final devfs = new DevFS(); |
| 150 | 154 |
| 151 void _addClient(Client client) { | 155 void _addClient(Client client) { |
| 152 assert(client.streams.isEmpty); | 156 assert(client.streams.isEmpty); |
| 153 clients.add(client); | 157 clients.add(client); |
| 154 } | 158 } |
| 155 | 159 |
| 156 void _removeClient(Client client) { | 160 void _removeClient(Client client) { |
| 157 clients.remove(client); | 161 clients.remove(client); |
| 158 for (var streamId in client.streams) { | 162 for (var streamId in client.streams) { |
| 159 if (!_isAnyClientSubscribed(streamId)) { | 163 if (!_isAnyClientSubscribed(streamId)) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 // Close receive ports. | 203 // Close receive ports. |
| 200 isolateLifecyclePort.close(); | 204 isolateLifecyclePort.close(); |
| 201 scriptLoadPort.close(); | 205 scriptLoadPort.close(); |
| 202 | 206 |
| 203 // Create a copy of the set as a list because client.disconnect() will | 207 // Create a copy of the set as a list because client.disconnect() will |
| 204 // alter the connected clients set. | 208 // alter the connected clients set. |
| 205 var clientsList = clients.toList(); | 209 var clientsList = clients.toList(); |
| 206 for (var client in clientsList) { | 210 for (var client in clientsList) { |
| 207 client.disconnect(); | 211 client.disconnect(); |
| 208 } | 212 } |
| 209 _devfs.cleanup(); | 213 devfs.cleanup(); |
| 210 if (VMServiceEmbedderHooks.cleanup != null) { | 214 if (VMServiceEmbedderHooks.cleanup != null) { |
| 211 await VMServiceEmbedderHooks.cleanup(); | 215 await VMServiceEmbedderHooks.cleanup(); |
| 212 } | 216 } |
| 213 // Notify the VM that we have exited. | 217 // Notify the VM that we have exited. |
| 214 _onExit(); | 218 _onExit(); |
| 215 } | 219 } |
| 216 | 220 |
| 217 void messageHandler(message) { | 221 void messageHandler(message) { |
| 218 if (message is List) { | 222 if (message is List) { |
| 219 if (message.length == 2) { | 223 if (message.length == 2) { |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 } | 398 } |
| 395 if (message.method == 'streamListen') { | 399 if (message.method == 'streamListen') { |
| 396 return _streamListen(message); | 400 return _streamListen(message); |
| 397 } | 401 } |
| 398 if (message.method == 'streamCancel') { | 402 if (message.method == 'streamCancel') { |
| 399 return _streamCancel(message); | 403 return _streamCancel(message); |
| 400 } | 404 } |
| 401 if (message.method == '_spawnUri') { | 405 if (message.method == '_spawnUri') { |
| 402 return _spawnUri(message); | 406 return _spawnUri(message); |
| 403 } | 407 } |
| 404 if (_devfs.shouldHandleMessage(message)) { | 408 if (devfs.shouldHandleMessage(message)) { |
| 405 return _devfs.handleMessage(message); | 409 return devfs.handleMessage(message); |
| 406 } | 410 } |
| 407 if (message.params['isolateId'] != null) { | 411 if (message.params['isolateId'] != null) { |
| 408 return runningIsolates.route(message); | 412 return runningIsolates.route(message); |
| 409 } | 413 } |
| 410 return message.sendToVM(); | 414 return message.sendToVM(); |
| 411 } | 415 } |
| 412 } | 416 } |
| 413 | 417 |
| 414 RawReceivePort boot() { | 418 RawReceivePort boot() { |
| 415 // Return the port we expect isolate startup and shutdown messages on. | 419 // Return the port we expect isolate startup and shutdown messages on. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 434 external bool _vmListenStream(String streamId); | 438 external bool _vmListenStream(String streamId); |
| 435 | 439 |
| 436 /// Cancel a subscription to a service stream. | 440 /// Cancel a subscription to a service stream. |
| 437 external void _vmCancelStream(String streamId); | 441 external void _vmCancelStream(String streamId); |
| 438 | 442 |
| 439 /// Get the bytes to the tar archive. | 443 /// Get the bytes to the tar archive. |
| 440 external Uint8List _requestAssets(); | 444 external Uint8List _requestAssets(); |
| 441 | 445 |
| 442 /// Notify the vm service that an isolate has been spawned via rpc. | 446 /// Notify the vm service that an isolate has been spawned via rpc. |
| 443 external void _spawnUriNotify(obj, String token); | 447 external void _spawnUriNotify(obj, String token); |
| OLD | NEW |