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 library vmservice; | 5 library vmservice; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:convert'; | 8 import 'dart:convert'; |
9 import 'dart:isolate'; | 9 import 'dart:isolate'; |
10 import 'dart:typed_data'; | 10 import 'dart:typed_data'; |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 } | 171 } |
172 | 172 |
173 String _encodeResult(Message message, Map result) { | 173 String _encodeResult(Message message, Map result) { |
174 var response = { | 174 var response = { |
175 'id' : message.serial, | 175 'id' : message.serial, |
176 'result' : result, | 176 'result' : result, |
177 }; | 177 }; |
178 return JSON.encode(response); | 178 return JSON.encode(response); |
179 } | 179 } |
180 | 180 |
181 bool _isValidStream(String streamId) { | |
182 final validStreams = [ 'Isolate', 'Debug', 'GC', '_Echo', '_Graph' ]; | |
183 return validStreams.contains(streamId); | |
184 } | |
185 | |
186 bool _isAnyClientSubscribed(String streamId) { | 181 bool _isAnyClientSubscribed(String streamId) { |
187 for (var client in clients) { | 182 for (var client in clients) { |
188 if (client.streams.contains(streamId)) { | 183 if (client.streams.contains(streamId)) { |
189 return true; | 184 return true; |
190 } | 185 } |
191 } | 186 } |
192 return false; | 187 return false; |
193 } | 188 } |
194 | 189 |
195 Future<String> _streamListen(Message message) async { | 190 Future<String> _streamListen(Message message) async { |
196 var client = message.client; | 191 var client = message.client; |
197 var streamId = message.params['streamId']; | 192 var streamId = message.params['streamId']; |
198 | 193 |
199 if (!_isValidStream(streamId)) { | |
200 return _encodeError( | |
201 message, _kInvalidParams, | |
202 details:"streamListen: invalid 'streamId' parameter: ${streamId}"); | |
203 } | |
204 if (client.streams.contains(streamId)) { | 194 if (client.streams.contains(streamId)) { |
205 return _encodeError(message, _kStreamAlreadySubscribed); | 195 return _encodeError(message, _kStreamAlreadySubscribed); |
206 } | 196 } |
207 if (!_isAnyClientSubscribed(streamId)) { | 197 if (!_isAnyClientSubscribed(streamId)) { |
208 _vmListenStream(streamId); | 198 if (!_vmListenStream(streamId)) { |
| 199 return _encodeError( |
| 200 message, _kInvalidParams, |
| 201 details:"streamListen: invalid 'streamId' parameter: ${streamId}"); |
| 202 } |
209 } | 203 } |
210 client.streams.add(streamId); | 204 client.streams.add(streamId); |
211 | 205 |
212 var result = { 'type' : 'Success' }; | 206 var result = { 'type' : 'Success' }; |
213 return _encodeResult(message, result); | 207 return _encodeResult(message, result); |
214 } | 208 } |
215 | 209 |
216 Future<String> _streamCancel(Message message) async { | 210 Future<String> _streamCancel(Message message) async { |
217 var client = message.client; | 211 var client = message.client; |
218 var streamId = message.params['streamId']; | 212 var streamId = message.params['streamId']; |
219 | 213 |
220 if (!_isValidStream(streamId)) { | |
221 return _encodeError( | |
222 message, _kInvalidParams, | |
223 details:"streamCancel: invalid 'streamId' parameter: ${streamId}"); | |
224 } | |
225 if (!client.streams.contains(streamId)) { | 214 if (!client.streams.contains(streamId)) { |
226 return _encodeError(message, _kStreamNotSubscribed); | 215 return _encodeError(message, _kStreamNotSubscribed); |
227 } | 216 } |
228 client.streams.remove(streamId); | 217 client.streams.remove(streamId); |
229 if (!_isAnyClientSubscribed(streamId)) { | 218 if (!_isAnyClientSubscribed(streamId)) { |
230 _vmCancelStream(streamId); | 219 _vmCancelStream(streamId); |
231 } | 220 } |
232 | 221 |
233 var result = { 'type' : 'Success' }; | 222 var result = { 'type' : 'Success' }; |
234 return _encodeResult(message, result); | 223 return _encodeResult(message, result); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 | 313 |
325 void _registerIsolate(int port_id, SendPort sp, String name) { | 314 void _registerIsolate(int port_id, SendPort sp, String name) { |
326 var service = new VMService(); | 315 var service = new VMService(); |
327 service.runningIsolates.isolateStartup(port_id, sp, name); | 316 service.runningIsolates.isolateStartup(port_id, sp, name); |
328 } | 317 } |
329 | 318 |
330 void _onStart() native "VMService_OnStart"; | 319 void _onStart() native "VMService_OnStart"; |
331 | 320 |
332 void _onExit() native "VMService_OnExit"; | 321 void _onExit() native "VMService_OnExit"; |
333 | 322 |
334 void _vmListenStream(String streamId) native "VMService_ListenStream"; | 323 bool _vmListenStream(String streamId) native "VMService_ListenStream"; |
335 | 324 |
336 void _vmCancelStream(String streamId) native "VMService_CancelStream"; | 325 void _vmCancelStream(String streamId) native "VMService_CancelStream"; |
OLD | NEW |