Chromium Code Reviews| Index: runtime/bin/vmservice/observatory/lib/service_common.dart |
| =================================================================== |
| --- runtime/bin/vmservice/observatory/lib/service_common.dart (revision 39216) |
| +++ runtime/bin/vmservice/observatory/lib/service_common.dart (working copy) |
| @@ -6,6 +6,7 @@ |
| import 'dart:async'; |
| import 'dart:convert'; |
| +import 'dart:typed_data'; |
| import 'package:logging/logging.dart'; |
| import 'package:observatory/service.dart'; |
| @@ -69,6 +70,7 @@ |
| bool get isOpen; |
| void send(dynamic data); |
| void close(); |
| + Future<ByteData> nonStringToByteData(dynamic data); |
| } |
| /// A [CommonWebSocketVM] communicates with a Dart VM over a CommonWebSocket. |
| @@ -160,7 +162,21 @@ |
| // WebSocket message event handler. |
| void _onMessage(dynamic data) { |
| - assert(data is String); // We don't handle binary data, yet. |
| + if (data is! String) { |
| + _webSocket.nonStringToByteData(data).then((ByteData bytes) { |
| + // See format spec. in VMs Service::SendEvent. |
| + int offset = 0; |
| + int metaSize = bytes.getUint64(offset, Endianness.BIG_ENDIAN); |
| + offset += 8; |
| + var meta = new Utf8Decoder().convert(new Uint8List.view( |
|
Cutch
2014/08/15 21:33:58
Can we reuse the Utf8Decoder?
koda
2014/08/15 22:20:53
Done.
|
| + bytes.buffer, bytes.offsetInBytes + offset, metaSize)); |
| + offset += metaSize; |
| + var data = new ByteData.view( |
| + bytes.buffer, bytes.offsetInBytes + offset); |
| + postEventMessage(meta, data); |
| + }); |
| + return; |
| + } |
| var map = JSON.decode(data); |
| if (map == null) { |
| Logger.root.severe('WebSocketVM got empty message'); |