feat: add retry connect socket, close when logged out

Signed-off-by: pakintada@gmail.com <Pakin>
This commit is contained in:
pakintada@gmail.com 2026-02-26 12:59:08 +07:00
parent c876847eff
commit 4866674f26
2 changed files with 21 additions and 3 deletions

View file

@ -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<WebSocket | null>(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();
}
};