Pārlūkot izejas kodu

fixes peerserver issue 3.

Michelle Bu 12 gadi atpakaļ
vecāks
revīzija
2f2416742c
3 mainītis faili ar 68 papildinājumiem un 16 dzēšanām
  1. 34 8
      dist/peer.js
  2. 0 0
      dist/peer.min.js
  3. 34 8
      lib/socket.js

+ 34 - 8
dist/peer.js

@@ -1833,18 +1833,44 @@ Socket.prototype._startXhrStream = function(n) {
 
 /** Handles onreadystatechange response as a stream. */
 Socket.prototype._handleStream = function(http) {
-  var self = this;
   // 3 and 4 are loading/done state. All others are not relevant.
-  var message = http.responseText.split('\n')[http._index];
+  var messages = http.responseText.split('\n');
+
+  // Check to see if anything needs to be processed on buffer.
+  if (!!http._buffer && http._buffer.length > 0) {
+    while (http._buffer.length > 0) {
+      var index = http._buffer.shift();
+      var bufferedMessage = messages[index];
+      try {
+        bufferedMessage = JSON.parse(bufferedMessage);
+      } catch(e) {
+        http._buffer.shift(index);
+        break;
+      }
+      this.emit('message', bufferedMessage);
+    }
+  }
+
+  var message = messages[http._index];
   if (!!message) {
     http._index += 1;
-    try {
-      message = JSON.parse(message);
-    } catch(e) {
-      util.log('Invalid server message', message);
-      return;
+    // Buffering--this message is incomplete and we'll get to it next time.
+    // This checks if the httpResponse ended in a `\n`, in which case the last
+    // element of messages should be the empty string.
+    if (http._index === messages.length) {
+      if (!http._buffer) {
+        http._buffer = [];
+      }
+      http._buffer.push(http._index - 1);
+    } else {
+      try {
+        message = JSON.parse(message);
+      } catch(e) {
+        util.log('Invalid server message', message);
+        return;
+      }
+      this.emit('message', message);
     }
-    self.emit('message', message);
   }
 };
 

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
dist/peer.min.js


+ 34 - 8
lib/socket.js

@@ -85,18 +85,44 @@ Socket.prototype._startXhrStream = function(n) {
 
 /** Handles onreadystatechange response as a stream. */
 Socket.prototype._handleStream = function(http) {
-  var self = this;
   // 3 and 4 are loading/done state. All others are not relevant.
-  var message = http.responseText.split('\n')[http._index];
+  var messages = http.responseText.split('\n');
+
+  // Check to see if anything needs to be processed on buffer.
+  if (!!http._buffer && http._buffer.length > 0) {
+    while (http._buffer.length > 0) {
+      var index = http._buffer.shift();
+      var bufferedMessage = messages[index];
+      try {
+        bufferedMessage = JSON.parse(bufferedMessage);
+      } catch(e) {
+        http._buffer.shift(index);
+        break;
+      }
+      this.emit('message', bufferedMessage);
+    }
+  }
+
+  var message = messages[http._index];
   if (!!message) {
     http._index += 1;
-    try {
-      message = JSON.parse(message);
-    } catch(e) {
-      util.log('Invalid server message', message);
-      return;
+    // Buffering--this message is incomplete and we'll get to it next time.
+    // This checks if the httpResponse ended in a `\n`, in which case the last
+    // element of messages should be the empty string.
+    if (http._index === messages.length) {
+      if (!http._buffer) {
+        http._buffer = [];
+      }
+      http._buffer.push(http._index - 1);
+    } else {
+      try {
+        message = JSON.parse(message);
+      } catch(e) {
+        util.log('Invalid server message', message);
+        return;
+      }
+      this.emit('message', message);
     }
-    self.emit('message', message);
   }
 };
 

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels