aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/socket.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-07-25 21:45:41 -0700
committerAdam Soltys <[email protected]>2022-07-25 21:45:41 -0700
commit4aa1ad89a0e2d489bc6b85ab3291719e080757ad (patch)
treeff2d9463f454bc6347be0f782ab1c5a29a1a23cb /src/lib/socket.js
parenteb9a9c048ebcda09df0ba31745b9d9a5b543596f (diff)
downloadcoinos-ui-4aa1ad89a0e2d489bc6b85ab3291719e080757ad.tar.gz
coinos-ui-4aa1ad89a0e2d489bc6b85ab3291719e080757ad.zip
socket reconnection logic
Diffstat (limited to 'src/lib/socket.js')
-rw-r--r--src/lib/socket.js43
1 files changed, 42 insertions, 1 deletions
diff --git a/src/lib/socket.js b/src/lib/socket.js
index 978c053a..0360acd5 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -1,4 +1,4 @@
-import { rate } from "$lib/store";
+import { rate, ws } from '$lib/store';
export const messages = (data) => ({
rate() {
rate.set(data);
@@ -8,3 +8,44 @@ export const messages = (data) => ({
console.log(data);
}
});
+
+const token =
+ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImJvYiIsImlhdCI6MTY1ODc5NDkxMX0._zFTEADrbLffcXa5sIMrJtJ483VdIiYmsdt2ofibxu4';
+const initialReconnectDelay = 1000;
+const maxReconnectDelay = 16000;
+
+let currentReconnectDelay = initialReconnectDelay;
+let socket;
+
+export function connect() {
+ socket = new WebSocket('ws://localhost:3119/ws');
+ socket.addEventListener('open', onWebsocketOpen);
+ socket.addEventListener('close', onWebsocketClose);
+ socket.addEventListener('message', onWebsocketMessage);
+
+ ws.set(socket);
+}
+
+function onWebsocketMessage(msg) {
+ let { type, data } = JSON.parse(msg.data);
+ messages(data)[type] && messages(data)[type]();
+}
+
+function onWebsocketOpen() {
+ currentReconnectDelay = initialReconnectDelay;
+ socket.send(JSON.stringify({ type: 'login', data: token }));
+}
+
+function onWebsocketClose() {
+ ws.set(null);
+ setTimeout(() => {
+ reconnectToWebsocket();
+ }, currentReconnectDelay + Math.floor(Math.random() * 3000));
+}
+
+function reconnectToWebsocket() {
+ if (currentReconnectDelay < maxReconnectDelay) {
+ currentReconnectDelay *= 2;
+ }
+ connect();
+}