From a251541a5311fd4679479293edb5027b0aeadbde Mon Sep 17 00:00:00 2001 From: Seth Call Date: Sun, 1 Sep 2013 16:28:03 +0000 Subject: [PATCH] * VRFS-594 - heartbeat checking plus hopefully more sophisticated reconnect logi --- app/assets/javascripts/JamServer.js | 25 +++++++++++++++---------- app/assets/javascripts/jam_rest.js | 6 +++--- app/assets/javascripts/sessionModel.js | 20 ++++++++++++++------ 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/app/assets/javascripts/JamServer.js b/app/assets/javascripts/JamServer.js index bfbb66425..27f0e50fe 100644 --- a/app/assets/javascripts/JamServer.js +++ b/app/assets/javascripts/JamServer.js @@ -17,7 +17,18 @@ server.clientID = ""; server.publicIP = ""; server.dispatchTable = {}; + server.connected = false; + + // handles logic if the websocket connection closes, and if it was in error then also prompt for reconnect + function closedCleanup(in_error) { + if(server.connected) { + server.connected = false; + if(in_error) { + context.JK.CurrentSessionModel.onWebsocketDisconnected(); + } + } + } server.registerMessageCallback = function(messageType, callback) { if (server.dispatchTable[messageType] === undefined) { server.dispatchTable[messageType] = []; @@ -57,10 +68,9 @@ server.socket.close(); - if(in_error) { - context.JK.CurrentSessionModel.onWebsocketDisconnected(); - } + closedCleanup(in_error); } + server.rememberLogin = function() { var token, loginMessage; token = $.cookie("remember_token"); @@ -99,13 +109,7 @@ server.onClose = function() { logger.log("Socket to server closed."); - if (context.jamClient !== undefined) - { - context.jamClient.connected = false; - } - - context.JK.CurrentSessionModel.onWebsocketDisconnected(); - + closedCleanup(true); }; server.send = function(message) { @@ -147,6 +151,7 @@ logger.debug("Handling LOGIN_ACK. Updating client id to " + payload.client_id); server.clientID = payload.client_id; server.publicIP = payload.public_ip; + server.connected = true; if (context.jamClient !== undefined) { diff --git a/app/assets/javascripts/jam_rest.js b/app/assets/javascripts/jam_rest.js index 3236bd28d..c5ffeec90 100644 --- a/app/assets/javascripts/jam_rest.js +++ b/app/assets/javascripts/jam_rest.js @@ -146,10 +146,10 @@ /** check if the server is alive */ function serverHealthCheck(options) { + console.log("serverHealthCheck") return $.ajax({ - url: window.host, - cache: false, - dataType: "html" + type: "GET", + url: "/api/versioncheck" }); } diff --git a/app/assets/javascripts/sessionModel.js b/app/assets/javascripts/sessionModel.js index 859e645b4..18c0b811b 100644 --- a/app/assets/javascripts/sessionModel.js +++ b/app/assets/javascripts/sessionModel.js @@ -42,6 +42,9 @@ refreshCurrentSession(); server.registerMessageCallback(context.JK.MessageType.MUSICIAN_SESSION_JOIN, refreshCurrentSession); server.registerMessageCallback(context.JK.MessageType.MUSICIAN_SESSION_DEPART, refreshCurrentSession); + }) + .fail(function() { + currentSessionId = null; }); return deferred; @@ -77,7 +80,8 @@ currentSessionId = null; } else { - deferred = rest.serverHealthCheck(); + deferred = new $.Deferred(); + deferred.resolve(); } return deferred; @@ -313,7 +317,7 @@ dataType: "json", contentType: 'application/json', url: url, - async: false, + async: true, data: JSON.stringify(data), processData:false }); @@ -324,13 +328,17 @@ return $.ajax({ type: "DELETE", url: url, - async: false + async: true }); } function reconnect() { - window.location.reload(); + context.JK.CurrentSessionModel.leaveCurrentSession() + .always(function() { + window.location.reload(); + }); } + function registerReconnect(content) { $('a.disconnected-reconnect', content).click(function() { @@ -340,12 +348,11 @@ html : template }); - context.JK.CurrentSessionModel.leaveCurrentSession() + rest.serverHealthCheck() .done(function() { reconnect(); }) .fail(function(xhr, textStatus, errorThrown) { - console.log("leaveCurrentSession failed: ", arguments); if(xhr && xhr.status >= 100) { // we could connect to the server, and it's alive @@ -362,6 +369,7 @@ } }); + return false; }); }