Selaa lähdekoodia

Lost message buffer read from with async start connection in media connection

ericz 11 vuotta sitten
vanhempi
commit
c6e3b1802b
2 muutettua tiedostoa jossa 21 lisäystä ja 9 poistoa
  1. 5 1
      lib/mediaconnection.js
  2. 16 8
      lib/peer.js

+ 5 - 1
lib/mediaconnection.js

@@ -11,7 +11,6 @@ function MediaConnection(peer, provider, options) {
   this.type = 'media';
   this.peer = peer;
   this.provider = provider;
-
   this.metadata = this.options.metadata;
   this.localStream = this.options._stream;
 
@@ -67,6 +66,11 @@ MediaConnection.prototype.answer = function(stream) {
     this,
     this.options._payload
   )
+  // Retrieve lost messages stored because PeerConnection not set up.
+  var messages = this.provider._getMessages(this.id);
+  for (var i = 0, ii = messages.length; i < ii; i += 1) {
+    this.handleMessage(messages[i]);
+  }
   this.open = true;
 };
 

+ 16 - 8
lib/peer.js

@@ -200,12 +200,9 @@ Peer.prototype._handleMessage = function(message) {
           return;
         }
         // Find messages.
-        var messages = this._lostMessages[connection.id];
-        if (messages) {
-          for (var i = 0, ii = messages.length; i < ii; i += 1) {
-            connection.handleMessage(messages[i]);
-          }
-          delete this._lostMessages[connection.id];
+        var messages = this._getMessages(connectionId);
+        for (var i = 0, ii = messages.length; i < ii; i += 1) {
+          connection.handleMessage(messages[i]);
         }
       }
       break;
@@ -218,7 +215,7 @@ Peer.prototype._handleMessage = function(message) {
       var id = payload.connectionId;
       var connection = this.getConnection(peer, id);
 
-      if (connection) {
+      if (connection && connection.pc) {
         // Pass it on.
         connection.handleMessage(message);
       } else if (id) {
@@ -231,7 +228,7 @@ Peer.prototype._handleMessage = function(message) {
   }
 }
 
-/** Stores messages without a connection, to be claimed later. */
+/** Stores messages without a set up connection, to be claimed later. */
 Peer.prototype._storeMessage = function(connectionId, message) {
   if (!this._lostMessages[connectionId]) {
     this._lostMessages[connectionId] = [];
@@ -239,6 +236,17 @@ Peer.prototype._storeMessage = function(connectionId, message) {
   this._lostMessages[connectionId].push(message);
 }
 
+/** Retrieve messages from lost message store */
+Peer.prototype._getMessages = function(connectionId) {
+  var messages = this._lostMessages[connectionId];
+  if (messages) {
+    delete this._lostMessages[connectionId];
+    return messages;
+  } else {
+    return [];
+  }
+}
+
 /**
  * Returns a DataConnection to the specified peer. See documentation for a
  * complete list of options.