From d99b4d53e16fd5620e0678b9fb046c8a9f7d83dd Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Mon, 29 Sep 2025 22:14:15 -0700 Subject: [PATCH] better reconnect --- src/js/websocket.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/js/websocket.ts b/src/js/websocket.ts index b2a74f6..d4407da 100644 --- a/src/js/websocket.ts +++ b/src/js/websocket.ts @@ -8,6 +8,8 @@ import { addErrorMessage } from "./scrollback.js" const MAX_RETRIES = 5 let retries = 0 +let connected = false +let msgQueue: Message[] = [] let ws: WebSocket | null = null @@ -20,10 +22,21 @@ export function startConnection() { ws.onmessage = receive ws.onclose = retryConnection ws.onerror = () => ws?.close() + ws.onopen = () => { + connected = true + msgQueue.forEach(msg => send(msg)) + msgQueue.length = 0 + } } // send any message export function send(msg: Message) { + if (!connected) { + msgQueue.push(msg) + startConnection() + return + } + if (!msg.session) msg.session = sessionID ws?.readyState === 1 && ws.send(JSON.stringify(msg)) console.log("-> send", msg) @@ -41,6 +54,8 @@ export function close() { } function retryConnection() { + connected = false + if (retries >= MAX_RETRIES) { addErrorMessage(`!! Failed to reconnect ${retries} times. Server is down.`) if (ws) ws.onclose = () => { }