From 3e2368c0c9f371e7001a38c68fed50d6493da7c4 Mon Sep 17 00:00:00 2001 From: schlagmichdoch Date: Thu, 1 Jun 2023 01:26:53 +0200 Subject: [PATCH] stabilize connection on reconnect by terminating websocket only on timeout and not always when peer leaves its ip room --- index.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/index.js b/index.js index e7e47f1..2e5bdcb 100644 --- a/index.js +++ b/index.js @@ -219,10 +219,15 @@ class PairDropServer { } _onDisconnect(sender) { + this._disconnect(sender); + } + + _disconnect(sender) { this._leaveRoom(sender, 'ip', '', true); this._leaveAllSecretRooms(sender, true); this._removeRoomKey(sender.roomKey); sender.roomKey = null; + sender.socket.terminate(); } _onRoomSecrets(sender, message) { @@ -357,10 +362,6 @@ class PairDropServer { _joinRoom(peer, roomType = 'ip', roomSecret = '') { const room = roomType === 'ip' ? peer.ip : roomSecret; - if (this._rooms[room] && this._rooms[room][peer.id]) { - this._leaveRoom(peer, roomType, roomSecret); - } - // if room doesn't exist, create it if (!this._rooms[room]) { this._rooms[room] = {}; @@ -385,10 +386,6 @@ class PairDropServer { // delete the peer delete this._rooms[room][peer.id]; - if (roomType === 'ip') { - peer.socket.terminate(); - } - //if room is empty, delete the room if (!Object.keys(this._rooms[room]).length) { delete this._rooms[room]; @@ -468,8 +465,7 @@ class PairDropServer { peer.lastBeat = Date.now(); } if (Date.now() - peer.lastBeat > 2 * timeout) { - this._leaveRoom(peer); - this._leaveAllSecretRooms(peer); + this._disconnect(peer); return; }