diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/realtime.js | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/realtime.js b/lib/realtime.js index ad4ae215..25405338 100644 --- a/lib/realtime.js +++ b/lib/realtime.js @@ -323,17 +323,27 @@ function clearSocketQueue(queue, socket) { } } +function connectNextSocket() { + isConnectionBusy = false; + if (connectionSocketQueue.length > 0) + startConnection(connectionSocketQueue[0]); +} + var isConnectionBusy = false; var connectionSocketQueue = []; var isDisconnectBusy = false; var disconnectSocketQueue = []; function finishConnection(socket, note, user) { + // if no valid info provided will drop the client if (!socket || !note || !user) { if (note) delete note; if (user) delete user; - connectionSocketQueue.pop(); - isConnectionBusy = false; + if (socket) + clearSocketQueue(connectionSocketQueue, socket); + else + connectionSocketQueue.shift(); + connectNextSocket(); return; } //check view permission @@ -356,9 +366,7 @@ function finishConnection(socket, note, user) { //clear finished socket in queue clearSocketQueue(connectionSocketQueue, socket); //seek for next socket - isConnectionBusy = false; - if (connectionSocketQueue.length > 0) - startConnection(connectionSocketQueue[0]); + connectNextSocket(); if (config.debug) { var noteId = socket.noteId; @@ -436,7 +444,7 @@ function failConnection(code, err, socket) { logger.error(err); // clear error socket in queue clearSocketQueue(connectionSocketQueue, socket); - isConnectionBusy = false; + connectNextSocket(); // emit error info socket.emit('info', { code: code |