From 4866674f2624fd43c0005e7c2ac8c0cc2d9a0c0e Mon Sep 17 00:00:00 2001 From: "pakintada@gmail.com" Date: Thu, 26 Feb 2026 12:59:08 +0700 Subject: [PATCH] feat: add retry connect socket, close when logged out Signed-off-by: pakintada@gmail.com --- src/lib/components/app-account-select.svelte | 8 ++++++++ src/lib/core/stores/websocketStore.ts | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/lib/components/app-account-select.svelte b/src/lib/components/app-account-select.svelte index f2c650a..a756528 100644 --- a/src/lib/components/app-account-select.svelte +++ b/src/lib/components/app-account-select.svelte @@ -14,6 +14,7 @@ import * as adb from '$lib/core/adb/adb'; import { browser } from '$app/environment'; import { deleteCookiesOnNonBrowser } from '$lib/helpers/cookie'; + import { socketStore } from '$lib/core/stores/websocketStore'; const sidebar = useSidebar(); @@ -44,6 +45,13 @@ } authStore.set(null); + + let socket = get(socketStore); + if (socket) { + socket.close(1011, 'logout'); + } + + socketStore.set(null); if (browser && 'cookieStore' in window) await cookieStore.delete('logged_in'); else deleteCookiesOnNonBrowser('logged_in'); await auth.signOut(); diff --git a/src/lib/core/stores/websocketStore.ts b/src/lib/core/stores/websocketStore.ts index 9e27eb1..6451c93 100644 --- a/src/lib/core/stores/websocketStore.ts +++ b/src/lib/core/stores/websocketStore.ts @@ -3,13 +3,16 @@ import { env } from '$env/dynamic/public'; import { get, writable } from 'svelte/store'; import { handleIncomingMessages } from '../handlers/messageHandler'; import { queue as msgQueue } from '../handlers/ws_messageSender'; +import { auth } from '../client/firebase'; + +let socket: WebSocket | null = null; export const socketStore = writable(null); export function connectToWebsocket() { if (browser) { console.log('connecting to ', env.PUBLIC_WSS); - const socket = new WebSocket(`${env.PUBLIC_WSS}`); + socket = new WebSocket(`${env.PUBLIC_WSS}`); socket.addEventListener('open', () => { socketStore.set(socket); @@ -18,7 +21,7 @@ export function connectToWebsocket() { while (get(msgQueue).length) { let queue = get(msgQueue); let current = queue.shift(); - if (current) { + if (current && socket) { socket.send(current); // set next msgQueue.set(queue); @@ -32,6 +35,13 @@ export function connectToWebsocket() { socket.addEventListener('close', () => { socketStore.set(null); + socket = null; + + if (auth.currentUser) { + console.log('try reconnect websocket ...'); + // retry again + setTimeout(() => connectToWebsocket(), 5000); + } }); socket.addEventListener('error', (e) => { @@ -40,7 +50,7 @@ export function connectToWebsocket() { }); return () => { - if (socket.readyState === WebSocket.OPEN) { + if (socket?.readyState === WebSocket.OPEN) { socket.close(); } };