Require a mandatory websocket reset once a minute
Compensate for the lack of keepalives in the WebSocket API. Fixes #67
This commit is contained in:
parent
a3bf40e852
commit
e831c649bd
1 changed files with 18 additions and 2 deletions
20
js/api.js
20
js/api.js
|
@ -299,16 +299,27 @@ window.textsecure.api = function() {
|
||||||
} else
|
} else
|
||||||
var params = $.param({});
|
var params = $.param({});
|
||||||
|
|
||||||
|
var reconnectTimer;
|
||||||
var reconnectSemaphore = 0;
|
var reconnectSemaphore = 0;
|
||||||
var socketWrapper = { onmessage: function() {}, ondisconnect: function() {}, onconnect: function() {} };
|
var socketWrapper = { onmessage: function() {}, ondisconnect: function() {}, onconnect: function() {} };
|
||||||
|
|
||||||
var connect = function() {
|
var connect = function() {
|
||||||
|
clearTimeout(reconnectTimer);
|
||||||
reconnectSemaphore++;
|
reconnectSemaphore++;
|
||||||
if (reconnectSemaphore <= 0)
|
if (reconnectSemaphore <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (socket) { socket.close(); }
|
||||||
var socket = new WebSocket(URL+params);
|
var socket = new WebSocket(URL+params);
|
||||||
|
|
||||||
|
function setReconnectTimeout() {
|
||||||
|
clearTimeout(reconnectTimer);
|
||||||
|
reconnectTimer = setTimeout(function() {
|
||||||
|
reconnectSemaphore--;
|
||||||
|
connect();
|
||||||
|
}, 60000);
|
||||||
|
};
|
||||||
|
|
||||||
socket.onerror = function(socketEvent) {
|
socket.onerror = function(socketEvent) {
|
||||||
console.log('Server is down :(');
|
console.log('Server is down :(');
|
||||||
reconnectSemaphore--;
|
reconnectSemaphore--;
|
||||||
|
@ -326,6 +337,7 @@ window.textsecure.api = function() {
|
||||||
socket.onopen = function(socketEvent) {
|
socket.onopen = function(socketEvent) {
|
||||||
console.log('Connected to server!');
|
console.log('Connected to server!');
|
||||||
socketWrapper.onconnect();
|
socketWrapper.onconnect();
|
||||||
|
setReconnectTimeout();
|
||||||
};
|
};
|
||||||
|
|
||||||
//TODO: wrap onmessage so that we reconnect on missing pong
|
//TODO: wrap onmessage so that we reconnect on missing pong
|
||||||
|
@ -337,10 +349,14 @@ window.textsecure.api = function() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((message.type === undefined && message.id !== undefined) || message.type === 4)
|
if ((message.type === undefined && message.id !== undefined) || message.type === 4) {
|
||||||
socketWrapper.onmessage(message);
|
socketWrapper.onmessage(message);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
console.log("Got invalid message from server: " + message);
|
console.log("Got invalid message from server: " + message);
|
||||||
|
}
|
||||||
|
|
||||||
|
setReconnectTimeout();
|
||||||
};
|
};
|
||||||
|
|
||||||
socketWrapper.send = function(msg) {
|
socketWrapper.send = function(msg) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue