better reconnect
This commit is contained in:
parent
877f888c96
commit
d99b4d53e1
|
|
@ -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 = () => { }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user