From e892661016af9a9a2de11b4786beadab9899ffb5 Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Thu, 21 Jan 2021 08:44:46 +1100 Subject: [PATCH] Added checks for peer availability and fixed peer error handling --- src/network/Session.js | 22 ++++++++++++++++++---- src/routes/Game.js | 4 ++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/network/Session.js b/src/network/Session.js index e38ea6e..d8c941c 100644 --- a/src/network/Session.js +++ b/src/network/Session.js @@ -119,7 +119,9 @@ class Session extends EventEmitter { */ sendTo(sessionId, eventId, data, channel) { if (!(sessionId in this.peers)) { - this._addPeer(sessionId, true); + if (!this._addPeer(sessionId, true)) { + return; + } } if (!this.peers[sessionId].ready) { @@ -146,7 +148,9 @@ class Session extends EventEmitter { */ startStreamTo(sessionId, track, stream) { if (!(sessionId in this.peers)) { - this._addPeer(sessionId, true); + if (!this._addPeer(sessionId, true)) { + return; + } } if (!this.peers[sessionId].ready) { @@ -192,6 +196,12 @@ class Session extends EventEmitter { this.socket.emit("join_game", gameId, password); } + /** + * Add a new peer connection + * @param {string} id + * @param {boolean} initiator + * @returns {boolean} True if peer was added successfully + */ _addPeer(id, initiator) { try { const connection = new Connection({ @@ -322,13 +332,15 @@ class Session extends EventEmitter { peer.connection.on("error", handleError.bind(this)); this.peers[id] = peer; + + return true; } catch (error) { logError(error); this.emit("peerError", { error }); - this.emit("disconnected"); for (let peer of Object.values(this.peers)) { peer.connection && peer.connection.destroy(); } + return false; } } @@ -374,7 +386,9 @@ class Session extends EventEmitter { _handleSignal(data) { const { from, signal } = data; if (!(from in this.peers)) { - this._addPeer(from, false); + if (!this._addPeer(from, false)) { + return; + } } this.peers[from].connection.signal(signal); } diff --git a/src/routes/Game.js b/src/routes/Game.js index 702180e..5df6f5a 100644 --- a/src/routes/Game.js +++ b/src/routes/Game.js @@ -66,9 +66,9 @@ function Game() { setPeerError("Unable to connect to party."); } } - session.on("error", handlePeerError); + session.on("peerError", handlePeerError); return () => { - session.off("error", handlePeerError); + session.off("peerError", handlePeerError); }; }, [session]);