From f1a0dff9e6cecf1e4e00fb6fc5e8816b88dbcb64 Mon Sep 17 00:00:00 2001 From: Wu Cheng-Han Date: Thu, 24 Sep 2015 11:40:08 +0800 Subject: Fixed user might not disconnect from server properly, handle more uncaught exceptions --- lib/realtime.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'lib/realtime.js') diff --git a/lib/realtime.js b/lib/realtime.js index 1e1f0107..af33cadf 100644 --- a/lib/realtime.js +++ b/lib/realtime.js @@ -171,9 +171,12 @@ function getStatus(callback) { } function getNotenameFromSocket(socket) { + if (!socket || !socket.handshake || !socket.handshake.headers) { + return; + } var referer = socket.handshake.headers.referer; if (!referer) { - return socket.disconnect(); + return socket.disconnect(true); } var hostUrl = url.parse(referer); var notename = hostUrl.pathname.split('/')[1]; @@ -184,7 +187,7 @@ function getNotenameFromSocket(socket) { socket.emit('info', { code: 404 }); - return socket.disconnect(); + return socket.disconnect(true); } notename = LZString.decompressFromBase64(notename); return notename; @@ -281,7 +284,10 @@ function startConnection(socket) { isConnectionBusy = true; var notename = getNotenameFromSocket(socket); - if (!notename) return; + if (!notename) { + isConnectionBusy = false; + return; + } if (!notes[notename]) { db.readFromDB(notename, function (err, data) { @@ -289,7 +295,7 @@ function startConnection(socket) { socket.emit('info', { code: 404 }); - socket.disconnect(); + socket.disconnect(true); //clear err socket in queue for (var i = 0; i < connectionSocketQueue.length; i++) { if (connectionSocketQueue[i].id == socket.id) @@ -306,6 +312,7 @@ function startConnection(socket) { Note.findOrNewNote(notename, permission, function (err, note) { if (err) { responseError(res, "404", "Not Found", "oops."); + isConnectionBusy = false; return; } var body = LZString.decompressFromBase64(data.rows[0].content); @@ -338,7 +345,10 @@ function disconnect(socket) { logger.info(JSON.stringify(users[socket.id])); } var notename = getNotenameFromSocket(socket); - if (!notename) return; + if (!notename) { + isDisconnectBusy = false; + return; + } if (users[socket.id]) { delete users[socket.id]; } -- cgit v1.2.3