From e831c649bdbd3f072177fc28867c4ecc1294e55d Mon Sep 17 00:00:00 2001 From: lilia Date: Tue, 21 Oct 2014 19:46:19 -0700 Subject: [PATCH] Require a mandatory websocket reset once a minute Compensate for the lack of keepalives in the WebSocket API. Fixes #67 --- js/api.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/js/api.js b/js/api.js index 6b345f481..98503e7c8 100644 --- a/js/api.js +++ b/js/api.js @@ -299,16 +299,27 @@ window.textsecure.api = function() { } else var params = $.param({}); + var reconnectTimer; var reconnectSemaphore = 0; var socketWrapper = { onmessage: function() {}, ondisconnect: function() {}, onconnect: function() {} }; var connect = function() { + clearTimeout(reconnectTimer); reconnectSemaphore++; if (reconnectSemaphore <= 0) return; + if (socket) { socket.close(); } var socket = new WebSocket(URL+params); + function setReconnectTimeout() { + clearTimeout(reconnectTimer); + reconnectTimer = setTimeout(function() { + reconnectSemaphore--; + connect(); + }, 60000); + }; + socket.onerror = function(socketEvent) { console.log('Server is down :('); reconnectSemaphore--; @@ -326,6 +337,7 @@ window.textsecure.api = function() { socket.onopen = function(socketEvent) { console.log('Connected to server!'); socketWrapper.onconnect(); + setReconnectTimeout(); }; //TODO: wrap onmessage so that we reconnect on missing pong @@ -337,10 +349,14 @@ window.textsecure.api = function() { return; } - if ((message.type === undefined && message.id !== undefined) || message.type === 4) + if ((message.type === undefined && message.id !== undefined) || message.type === 4) { socketWrapper.onmessage(message); - else + } + else { console.log("Got invalid message from server: " + message); + } + + setReconnectTimeout(); }; socketWrapper.send = function(msg) {