| Index: sdk/lib/io/io_resource_info.dart
|
| diff --git a/sdk/lib/io/io_resource_info.dart b/sdk/lib/io/io_resource_info.dart
|
| index 79557b36fefe8d380372ce0f5a62cd507b6b50f0..8c30c646995627e7bead00ebca152a04ef2a87a1 100644
|
| --- a/sdk/lib/io/io_resource_info.dart
|
| +++ b/sdk/lib/io/io_resource_info.dart
|
| @@ -4,10 +4,6 @@
|
|
|
| part of dart.io;
|
|
|
| -const String TCP_STRING = 'TCP';
|
| -const String UDP_STRING = 'UDP';
|
| -
|
| -
|
| abstract class _IOResourceInfo {
|
| final String type;
|
| final int id;
|
| @@ -35,6 +31,9 @@ abstract class _IOResourceInfo {
|
| static int getNextID() => _count++;
|
| }
|
|
|
| +// TODO(ricow): Move stopwatch into this class and use it for both files
|
| +// and sockets (by using setters on totalRead/totalWritten). Also, consider
|
| +// setting readCount and writeCount in those setters.
|
| abstract class _ReadWriteResourceInfo extends _IOResourceInfo {
|
| int totalRead;
|
| int totalWritten;
|
| @@ -70,13 +69,69 @@ abstract class _ReadWriteResourceInfo extends _IOResourceInfo {
|
| }
|
| }
|
|
|
| +class _FileResourceInfo extends _ReadWriteResourceInfo {
|
| + static const String TYPE = '_file';
|
| +
|
| + final file;
|
| +
|
| + static Map<int, _FileResourceInfo> openFiles =
|
| + new Map<int, _FileResourceInfo>();
|
| +
|
| + _FileResourceInfo(this.file) : super(TYPE) {
|
| + FileOpened(this);
|
| + }
|
| +
|
| + static FileOpened(_FileResourceInfo info) {
|
| + assert(!openFiles.containsKey(info.id));
|
| + openFiles[info.id] = info;
|
| + }
|
| +
|
| + static FileClosed(_FileResourceInfo info) {
|
| + assert(openFiles.containsKey(info.id));
|
| + openFiles.remove(info.id);
|
| + }
|
| +
|
| + static Iterable<Map<String, String>> getOpenFilesList() {
|
| + return new List.from(openFiles.values.map((e) => e.referenceValueMap));
|
| + }
|
| +
|
| + static Future<ServiceExtensionResponse> getOpenFiles(function, params) {
|
| + assert(function == '__getOpenFiles');
|
| + var data = {'type': '_openfiles', 'data': getOpenFilesList()};
|
| + var json = JSON.encode(data);
|
| + return new Future.value(new ServiceExtensionResponse.result(json));
|
| + }
|
| +
|
| + Map<String, String> getFileInfoMap() {
|
| + var result = fullValueMap;
|
| + return result;
|
| + }
|
| +
|
| + static Future<ServiceExtensionResponse> getFileInfoMapByID(function, params) {
|
| + assert(params.containsKey('id'));
|
| + var id = int.parse(params['id']);
|
| + var result =
|
| + openFiles.containsKey(id) ? openFiles[id].getFileInfoMap() : {};
|
| + var json = JSON.encode(result);
|
| + return new Future.value(new ServiceExtensionResponse.result(json));
|
| + }
|
| +
|
| + String get name {
|
| + return '${file.path}';
|
| + }
|
| +}
|
| +
|
| class _SocketResourceInfo extends _ReadWriteResourceInfo {
|
| + static const String TCP_STRING = 'TCP';
|
| + static const String UDP_STRING = 'UDP';
|
| + static const String TYPE = '_socket';
|
| +
|
| final socket;
|
|
|
| static Map<int, _SocketResourceInfo> openSockets =
|
| new Map<int, _SocketResourceInfo>();
|
|
|
| - _SocketResourceInfo(this.socket) : super('_socket') {
|
| + _SocketResourceInfo(this.socket) : super(TYPE) {
|
| SocketOpened(this);
|
| }
|
|
|
|
|