diff options
| author | Adam Soltys <[email protected]> | 2022-07-25 21:45:41 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-07-25 21:45:41 -0700 |
| commit | 4aa1ad89a0e2d489bc6b85ab3291719e080757ad (patch) | |
| tree | ff2d9463f454bc6347be0f782ab1c5a29a1a23cb /src/lib/socket.js | |
| parent | eb9a9c048ebcda09df0ba31745b9d9a5b543596f (diff) | |
| download | coinos-ui-4aa1ad89a0e2d489bc6b85ab3291719e080757ad.tar.gz coinos-ui-4aa1ad89a0e2d489bc6b85ab3291719e080757ad.zip | |
socket reconnection logic
Diffstat (limited to 'src/lib/socket.js')
| -rw-r--r-- | src/lib/socket.js | 43 |
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(); +} |
