// Copyright (c) 2014, 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. final Map _servicePathMap = { 'http' : { 'servers' : _httpServersServiceObject, 'serverconnections' : _httpServerConnectionsServiceObject, }, 'sockets' : _socketsServiceObject, 'websockets' : _webSocketsServiceObject, 'file' : { 'randomaccessfiles' : _randomAccessFilesServiceObject }, 'processes' : _processesServiceObject, }; String _getServicePath(obj) => obj._servicePath; String _serviceObjectHandler(List paths, List keys, List values) { assert(keys.length == values.length); if (paths.isEmpty) { return JSON.encode(_ioServiceObject()); } int i = 0; var current = _servicePathMap; do { current = current[paths[i]]; i++; } while (i < paths.length && current is Map); if (current is! Function) { return JSON.encode(_makeServiceError('Unrecognized path', paths, keys, values)); } var query = new Map(); for (int i = 0; i < keys.length; i++) { query[keys[i]] = values[i]; } return JSON.encode(current(paths.sublist(i))); } Map _makeServiceError(String message, List paths, List keys, List values, [String kind]) { var error = { 'type': 'Error', 'id': '', 'message': message, 'request': { 'arguments': paths, 'option_keys': keys, 'option_values': values, } }; if (kind != null) { error['kind'] = kind; } return error; } Map _ioServiceObject() { return { 'id': 'io', 'type': 'IO', 'name': 'io', 'user_name': 'io', }; } Map _httpServersServiceObject(args) { if (args.length == 1) { var server = _HttpServer._servers[int.parse(args.first)]; if (server == null) { return {}; } return server._toJSON(false); } return { 'id': 'io/http/servers', 'type': 'HttpServerList', 'members': _HttpServer._servers.values .map((server) => server._toJSON(true)).toList(), }; } Map _httpServerConnectionsServiceObject(args) { if (args.length == 1) { var connection = _HttpConnection._connections[int.parse(args.first)]; if (connection == null) { return {}; } return connection._toJSON(false); } return _makeServiceError("http/serverconnections can not be listed"); } Map _socketsServiceObject(args) { if (args.length == 1) { var socket = _NativeSocket._sockets[int.parse(args.first)]; if (socket == null) { return {}; } return socket._toJSON(false); } return { 'id': 'io/sockets', 'type': 'SocketList', 'members': _NativeSocket._sockets.values .map((socket) => socket._toJSON(true)).toList(), }; } Map _webSocketsServiceObject(args) { if (args.length == 1) { var webSocket = _WebSocketImpl._webSockets[int.parse(args.first)]; if (webSocket == null) { return {}; } return webSocket._toJSON(false); } return { 'id': 'io/websockets', 'type': 'WebSocketList', 'members': _WebSocketImpl._webSockets.values .map((webSocket) => webSocket._toJSON(true)).toList(), }; } Map _randomAccessFilesServiceObject(args) { if (args.length == 1) { var raf = _RandomAccessFile._files[int.parse(args.first)]; if (raf == null) { return {}; } return raf._toJSON(false); } return { 'id': 'io/file/randomaccessfiles', 'type': 'RandomAccessFileList', 'members': _RandomAccessFile._files.values .map((raf) => raf._toJSON(true)).toList(), }; } Map _processesServiceObject(args) { if (args.length == 1) { var process = _ProcessImpl._processes[int.parse(args.first)]; if (process == null) { return {}; } return process._toJSON(false); } return { 'id': 'io/processes', 'type': 'ProcessList', 'members': _ProcessImpl._processes.values .map((p) => p._toJSON(true)).toList(), }; }