Wait to manually disconnect after receiving 'offline' event (#1561)
* Wait to manually disconnect after receiving 'offline' event We've received Linux logs indicating that we can get offline/online blips - only 30ms between the two events. The app was never realy offline. So this change slows the whole disconnect process down. * Handle offline startup: register for online event, don't connect
This commit is contained in:
parent
75cece3358
commit
1f9fcd64c7
1 changed files with 60 additions and 15 deletions
|
@ -45,7 +45,7 @@
|
||||||
storage.put('safety-numbers-approval', false);
|
storage.put('safety-numbers-approval', false);
|
||||||
}
|
}
|
||||||
Whisper.Registration.markDone();
|
Whisper.Registration.markDone();
|
||||||
console.log("dispatching registration event");
|
console.log('dispatching registration event');
|
||||||
Whisper.events.trigger('registration_done');
|
Whisper.events.trigger('registration_done');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -81,9 +81,9 @@
|
||||||
|
|
||||||
window.dispatchEvent(new Event('storage_ready'));
|
window.dispatchEvent(new Event('storage_ready'));
|
||||||
|
|
||||||
console.log("listening for registration events");
|
console.log('listening for registration events');
|
||||||
Whisper.events.on('registration_done', function() {
|
Whisper.events.on('registration_done', function() {
|
||||||
console.log("handling registration event");
|
console.log('handling registration event');
|
||||||
connect(true);
|
connect(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -151,11 +151,66 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var disconnectTimer = null;
|
||||||
|
function onOffline() {
|
||||||
|
console.log('offline');
|
||||||
|
|
||||||
|
window.removeEventListener('offline', onOffline);
|
||||||
|
window.addEventListener('online', onOnline);
|
||||||
|
|
||||||
|
// We've received logs from Linux where we get an 'offline' event, then 30ms later
|
||||||
|
// we get an online event. This waits a bit after getting an 'offline' event
|
||||||
|
// before disconnecting the socket manually.
|
||||||
|
disconnectTimer = setTimeout(disconnect, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onOnline() {
|
||||||
|
console.log('online');
|
||||||
|
|
||||||
|
window.removeEventListener('online', onOnline);
|
||||||
|
window.addEventListener('offline', onOffline);
|
||||||
|
|
||||||
|
if (disconnectTimer && isSocketOnline()) {
|
||||||
|
console.log('Already online. Had a blip in online/offline status.');
|
||||||
|
clearTimeout(disconnectTimer);
|
||||||
|
disconnectTimer = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
function isSocketOnline() {
|
||||||
|
var socketStatus = window.getSocketStatus();
|
||||||
|
return socketStatus === WebSocket.CONNECTING || socketStatus === WebSocket.OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnect() {
|
||||||
|
console.log('disconnect');
|
||||||
|
|
||||||
|
// Clear timer, since we're only called when the timer is expired
|
||||||
|
disconnectTimer = null;
|
||||||
|
|
||||||
|
if (messageReceiver) {
|
||||||
|
messageReceiver.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var connectCount = 0;
|
var connectCount = 0;
|
||||||
function connect(firstRun) {
|
function connect(firstRun) {
|
||||||
console.log('connect');
|
console.log('connect');
|
||||||
window.removeEventListener('online', connect);
|
|
||||||
window.addEventListener('offline', disconnect);
|
// Bootstrap our online/offline detection, only the first time we connect
|
||||||
|
if (connectCount === 0 && navigator.onLine) {
|
||||||
|
window.addEventListener('offline', onOffline);
|
||||||
|
}
|
||||||
|
if (connectCount === 0 && !navigator.onLine) {
|
||||||
|
console.log('Starting up offline; will connect when we have network access');
|
||||||
|
window.addEventListener('online', onOnline);
|
||||||
|
onEmpty(); // this ensures that the loading screen is dismissed
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!Whisper.Registration.everDone()) { return; }
|
if (!Whisper.Registration.everDone()) { return; }
|
||||||
if (Whisper.Import.isIncomplete()) { return; }
|
if (Whisper.Import.isIncomplete()) { return; }
|
||||||
|
@ -476,16 +531,6 @@
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
function disconnect() {
|
|
||||||
window.removeEventListener('offline', disconnect);
|
|
||||||
window.addEventListener('online', connect);
|
|
||||||
|
|
||||||
console.log('offline');
|
|
||||||
if (messageReceiver) {
|
|
||||||
messageReceiver.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function onError(ev) {
|
function onError(ev) {
|
||||||
var error = ev.error;
|
var error = ev.error;
|
||||||
console.log(error);
|
console.log(error);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue