| Index: runtime/bin/vmservice/vmservice.dart
|
| diff --git a/runtime/bin/vmservice/vmservice.dart b/runtime/bin/vmservice/vmservice.dart
|
| index 309399fd227548d12d8968b6af9b6e844a0e6b9e..e70137e99a220f8b20e15c5c5083266a97761e54 100644
|
| --- a/runtime/bin/vmservice/vmservice.dart
|
| +++ b/runtime/bin/vmservice/vmservice.dart
|
| @@ -9,16 +9,21 @@ import 'dart:convert';
|
| import 'dart:isolate';
|
| import 'dart:typed_data';
|
|
|
| +part 'client.dart';
|
| part 'constants.dart';
|
| part 'resources.dart';
|
| part 'running_isolate.dart';
|
| part 'running_isolates.dart';
|
| -part 'service_request.dart';
|
| -part 'service_request_router.dart';
|
| +part 'message.dart';
|
| +part 'message_router.dart';
|
|
|
| -class VMService {
|
| +class VMService extends MessageRouter {
|
| static VMService _instance;
|
| + /// Collection of currently connected clients.
|
| + final Set<Client> clients = new Set<Client>();
|
| + /// Collection of currently running isolates.
|
| RunningIsolates runningIsolates = new RunningIsolates();
|
| + /// Isolate startup and shutdown messages are sent on this port.
|
| final RawReceivePort receivePort;
|
|
|
| void controlMessageHandler(int code, int port_id, SendPort sp, String name) {
|
| @@ -32,6 +37,14 @@ class VMService {
|
| }
|
| }
|
|
|
| + void _addClient(Client client) {
|
| + clients.add(client);
|
| + }
|
| +
|
| + void _removeClient(Client client) {
|
| + clients.remove(client);
|
| + }
|
| +
|
| void messageHandler(message) {
|
| assert(message is List);
|
| assert(message.length == 4);
|
| @@ -50,6 +63,28 @@ class VMService {
|
| }
|
| return _instance;
|
| }
|
| +
|
| + void _clientCollection(Message message) {
|
| + var members = [];
|
| + var result = {};
|
| + clients.forEach((client) {
|
| + members.add(client.toJson());
|
| + });
|
| + result['type'] = 'ClientList';
|
| + result['members'] = members;
|
| + message.setResponse(JSON.encode(result));
|
| + }
|
| +
|
| + Future<String> route(Message message) {
|
| + if (message.completed) {
|
| + return message.response;
|
| + }
|
| + if ((message.path.length == 1) && (message.path[0] == 'clients')) {
|
| + _clientCollection(message);
|
| + return message.response;
|
| + }
|
| + return runningIsolates.route(message);
|
| + }
|
| }
|
|
|
| void sendServiceMessage(SendPort sp, ReceivePort rp, Object m)
|
|
|