fix: sync bug

This commit is contained in:
alt0
2022-09-23 19:14:23 +08:00
parent 054664ef6f
commit 5ac0f91efc
6 changed files with 128 additions and 60 deletions
+59 -36
View File
@@ -65,6 +65,26 @@ export const registerWebsocket = (
let websocket: WebSocket | undefined = undefined;
const broadcastMessage = (buf: ArrayBuffer) => {
if (state === WebSocketState.connected) {
websocket?.send(buf);
}
};
const disconnect = () => {
if (websocket != null) {
websocket.close();
websocket = undefined;
state = WebSocketState.disconnected;
if (resyncInterval !== 0) {
clearInterval(resyncInterval);
}
clearInterval(checkInterval);
}
};
const ret = { broadcastMessage, disconnect };
_getToken(
provider.url,
token,
@@ -126,15 +146,26 @@ export const registerWebsocket = (
if (reconnect <= 0) provider.emit('lost-connection', []);
// Start with no reconnect timeout and increase timeout by
// using exponential backoff starting with 100ms
setTimeout(
registerWebsocket,
_getTimeout(provider),
provider,
token,
resyncInterval,
reconnect > 0 ? reconnect - 1 : 3,
protocol
);
setTimeout(() => {
const newRet = registerWebsocket(
provider,
token,
resyncInterval,
reconnect > 0 ? reconnect - 1 : 3,
protocol
);
ret.broadcastMessage = newRet.broadcastMessage;
ret.disconnect = newRet.disconnect;
}, _getTimeout(provider));
// setTimeout(
// registerWebsocket,
// _getTimeout(provider),
// provider,
// token,
// resyncInterval,
// reconnect > 0 ? reconnect - 1 : 3,
// protocol
// );
};
websocket.onopen = () => {
lastMessageReceived = time.getUnixTime();
@@ -172,14 +203,24 @@ export const registerWebsocket = (
.catch(err => {
provider.emit('lost-connection', []);
provider.wsUnsuccessfulReconnects++;
setTimeout(
registerWebsocket,
_getTimeout(provider),
provider,
token,
resyncInterval,
reconnect > 0 ? reconnect - 1 : 3
);
setTimeout(() => {
const newRet = registerWebsocket(
provider,
token,
resyncInterval,
reconnect > 0 ? reconnect - 1 : 3
);
ret.broadcastMessage = newRet.broadcastMessage;
ret.disconnect = newRet.disconnect;
}, _getTimeout(provider));
// setTimeout(
// registerWebsocket,
// _getTimeout(provider),
// provider,
// token,
// resyncInterval,
// reconnect > 0 ? reconnect - 1 : 3
// );
});
let resyncInterval = 0;
@@ -206,23 +247,5 @@ export const registerWebsocket = (
}
}, WEBSOCKET_RECONNECT / 10);
const broadcastMessage = (buf: ArrayBuffer) => {
if (state === WebSocketState.connected) {
websocket?.send(buf);
}
};
const disconnect = () => {
if (websocket != null) {
websocket.close();
websocket = undefined;
state = WebSocketState.disconnected;
if (resyncInterval !== 0) {
clearInterval(resyncInterval);
}
clearInterval(checkInterval);
}
};
return { broadcastMessage, disconnect };
return ret;
};