From 40478f4effea55d9e83620aecb7878fc8b3a1ddf Mon Sep 17 00:00:00 2001 From: Wu Cheng-Han Date: Tue, 5 Jul 2016 16:11:18 +0800 Subject: [PATCH] Fix realtime on finishConnection might not clear and connect next socket in queue and should use shift instead of pop on remove invalid socket in queue --- lib/realtime.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/realtime.js b/lib/realtime.js index ad4ae21..2540533 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