| Index: tools/ddbg.dart
|
| ===================================================================
|
| --- tools/ddbg.dart (revision 8261)
|
| +++ tools/ddbg.dart (working copy)
|
| @@ -11,6 +11,7 @@
|
| Map<int, Completer> outstandingCommands;
|
|
|
| Socket vmSock;
|
| +String vmData;
|
| OutputStream vmStream;
|
| int seqNum = 0;
|
|
|
| @@ -316,31 +317,34 @@
|
| }
|
|
|
|
|
| -// TODO(hausner): Need to handle the case where we receive only a partial
|
| -// message from the debugger, e.g. when the message is too big to fit in
|
| -// one network packet.
|
| -void processVmData(String s) {
|
| +void processVmData(String data) {
|
| final printMessages = false;
|
| - int msg_len = JSON.length(s);
|
| + if (vmData == null || vmData.length == 0) {
|
| + vmData = data;
|
| + } else {
|
| + vmData = vmData.concat(data);
|
| + }
|
| + int msg_len = JSON.length(vmData);
|
| if (printMessages && msg_len == 0) {
|
| - print("vm sent illegal or partial json message '$s'");
|
| - quitShell();
|
| + print("have partial or illegal json message"
|
| + " of ${vmData.length} chars:\n'$vmData'");
|
| return;
|
| }
|
| - while (msg_len > 0 && msg_len <= s.length) {
|
| - if (msg_len == s.length) {
|
| - if (printMessages) { print("message: $s"); }
|
| - processVmMessage(s);
|
| + while (msg_len > 0 && msg_len <= vmData.length) {
|
| + if (msg_len == vmData.length) {
|
| + if (printMessages) { print("have one full message:\n$vmData"); }
|
| + processVmMessage(vmData);
|
| + vmData = null;
|
| return;
|
| }
|
| - if (printMessages) { print("at least one message: '$s'"); }
|
| - var msg = s.substring(0, msg_len);
|
| + if (printMessages) { print("at least one message: '$vmData'"); }
|
| + var msg = vmData.substring(0, msg_len);
|
| if (printMessages) { print("first message: $msg"); }
|
| processVmMessage(msg);
|
| - s = s.substring(msg_len);
|
| - msg_len = JSON.length(s);
|
| + vmData = vmData.substring(msg_len);
|
| + msg_len = JSON.length(vmData);
|
| }
|
| - if (printMessages) { print("leftover vm data '$s'"); }
|
| + if (printMessages) { print("leftover vm data '$vmData'"); }
|
| }
|
|
|
|
|
|
|