add basic and somewhat clunky automatic reconnection support for the gateway
This commit is contained in:
parent
551d83fc06
commit
eb89803398
2 changed files with 24 additions and 2 deletions
|
@ -61,6 +61,9 @@ class GatewayConnection {
|
|||
}
|
||||
|
||||
GatewayConnection.prototype.connect = function(token) {
|
||||
if (token) this.token = token;
|
||||
if (this.token) token = this.token;
|
||||
|
||||
this.ws = new WebSocket(this.gatewayUrl);
|
||||
|
||||
this.handshakeCompleted = false;
|
||||
|
|
|
@ -3,17 +3,23 @@ import config from '../../Config';
|
|||
import store from '../../Global/store';
|
||||
import logger from '../../Util/Logger';
|
||||
|
||||
const { warn } = logger(["Experiments"]);
|
||||
const { warn, log } = logger(["globalGatewayConnection"]);
|
||||
const { warn: experimentsWarn } = logger(["globalGatewayConnection", "Experiments"]);
|
||||
|
||||
const globalGatewayConnection = new GatewayConnection(config.gatewayUrl);
|
||||
let currentlyReconnecting = false;
|
||||
|
||||
globalGatewayConnection.onopen = (sessionData) => {
|
||||
if (currentlyReconnecting) {
|
||||
store.dispatch({ type: 'application/updatebannertext', text: undefined });
|
||||
currentlyReconnecting = false;
|
||||
}
|
||||
store.dispatch({ type: 'gateway/connectionstatus', gateway: { isConnected: true } });
|
||||
store.dispatch({ type: 'authenticator/updatelocaluserobject', user: sessionData.user });
|
||||
store.dispatch({ type: 'channels/updatechannellist', channels: sessionData.channels });
|
||||
|
||||
if (localStorage.getItem("enableExperimentOverrides")) {
|
||||
warn("Experiment overrides are enabled");
|
||||
experimentsWarn("Experiment overrides are enabled");
|
||||
const experimentModifiers = JSON.parse(localStorage.getItem("experimentOverrides"));
|
||||
const experiments = {
|
||||
...sessionData.__global_experiments || {},
|
||||
|
@ -35,8 +41,21 @@ globalGatewayConnection.presenceUpdate = (presence) => {
|
|||
};
|
||||
|
||||
globalGatewayConnection.onclose = function() {
|
||||
if (currentlyReconnecting || globalGatewayConnection.ws.readyState === 1) return;
|
||||
currentlyReconnecting = true;
|
||||
warn("Gateway connection closed");
|
||||
store.dispatch({ type: 'authenticator/updatelocaluserobject', user: undefined });
|
||||
store.dispatch({ type: 'gateway/connectionstatus', gateway: { isConnected: false } });
|
||||
store.dispatch({ type: 'application/updatebannertext', text: "⚡ Hang tight! You've lost connection!" });
|
||||
const interval = setInterval(() => {
|
||||
if (globalGatewayConnection.ws.readyState === 1) {
|
||||
clearInterval(interval);
|
||||
currentlyReconnecting = false;
|
||||
return;
|
||||
}
|
||||
log("Attempting reconnection...");
|
||||
globalGatewayConnection.connect();
|
||||
}, 5000);
|
||||
};
|
||||
|
||||
export default globalGatewayConnection;
|
||||
|
|
Loading…
Reference in a new issue