better reconnect

This commit is contained in:
Chris Wanstrath 2025-09-29 22:14:15 -07:00
parent 877f888c96
commit d99b4d53e1

View File

@ -8,6 +8,8 @@ import { addErrorMessage } from "./scrollback.js"
const MAX_RETRIES = 5 const MAX_RETRIES = 5
let retries = 0 let retries = 0
let connected = false
let msgQueue: Message[] = []
let ws: WebSocket | null = null let ws: WebSocket | null = null
@ -20,10 +22,21 @@ export function startConnection() {
ws.onmessage = receive ws.onmessage = receive
ws.onclose = retryConnection ws.onclose = retryConnection
ws.onerror = () => ws?.close() ws.onerror = () => ws?.close()
ws.onopen = () => {
connected = true
msgQueue.forEach(msg => send(msg))
msgQueue.length = 0
}
} }
// send any message // send any message
export function send(msg: Message) { export function send(msg: Message) {
if (!connected) {
msgQueue.push(msg)
startConnection()
return
}
if (!msg.session) msg.session = sessionID if (!msg.session) msg.session = sessionID
ws?.readyState === 1 && ws.send(JSON.stringify(msg)) ws?.readyState === 1 && ws.send(JSON.stringify(msg))
console.log("-> send", msg) console.log("-> send", msg)
@ -41,6 +54,8 @@ export function close() {
} }
function retryConnection() { function retryConnection() {
connected = false
if (retries >= MAX_RETRIES) { if (retries >= MAX_RETRIES) {
addErrorMessage(`!! Failed to reconnect ${retries} times. Server is down.`) addErrorMessage(`!! Failed to reconnect ${retries} times. Server is down.`)
if (ws) ws.onclose = () => { } if (ws) ws.onclose = () => { }