diff --git a/src/lib/components/app-account-select.svelte b/src/lib/components/app-account-select.svelte index a756528..f2c650a 100644 --- a/src/lib/components/app-account-select.svelte +++ b/src/lib/components/app-account-select.svelte @@ -14,7 +14,6 @@ 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(); @@ -45,13 +44,6 @@ } 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/handlers/messageHandler.ts b/src/lib/core/handlers/messageHandler.ts index 45d7366..c4110c0 100644 --- a/src/lib/core/handlers/messageHandler.ts +++ b/src/lib/core/handlers/messageHandler.ts @@ -9,7 +9,6 @@ import { recipeStreamMeta } from '../stores/recipeStore'; import { buildOverviewFromServer } from '$lib/data/recipeService'; -import { auth } from '../client/firebase'; export const messages = writable([]); @@ -119,23 +118,7 @@ const handlers: Record void> = { } } }, - stream_patch_update: (p) => {}, - notify: (p) => { - let noti_level = p.level ?? 'INFO'; - let msg = p.msg ?? `Notify from ${p.from}`; - let target = p.to; - - if (target) { - // - let currentUsername = auth.currentUser?.displayName; - if (currentUsername && currentUsername === target) { - addNotification(`${noti_level}:${msg}`); - } - } else { - // broadcast to all - addNotification(`${noti_level}:${msg}`); - } - } + stream_patch_update: (p) => {} }; export function handleIncomingMessages(raw: string) { diff --git a/src/lib/core/stores/websocketStore.ts b/src/lib/core/stores/websocketStore.ts index 6451c93..ac7c243 100644 --- a/src/lib/core/stores/websocketStore.ts +++ b/src/lib/core/stores/websocketStore.ts @@ -3,25 +3,20 @@ 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() { +export const socketStore = writable(null, (set) => { if (browser) { console.log('connecting to ', env.PUBLIC_WSS); - socket = new WebSocket(`${env.PUBLIC_WSS}`); + const socket = new WebSocket(`${env.PUBLIC_WSS}`); socket.addEventListener('open', () => { - socketStore.set(socket); + set(socket); // recover messages on connect, flushing while (get(msgQueue).length) { let queue = get(msgQueue); let current = queue.shift(); - if (current && socket) { + if (current) { socket.send(current); // set next msgQueue.set(queue); @@ -34,25 +29,18 @@ export function connectToWebsocket() { }); socket.addEventListener('close', () => { - socketStore.set(null); - socket = null; - - if (auth.currentUser) { - console.log('try reconnect websocket ...'); - // retry again - setTimeout(() => connectToWebsocket(), 5000); - } + set(null); }); socket.addEventListener('error', (e) => { console.log('WebSocket error: ', e); - socketStore.set(null); + set(null); }); return () => { - if (socket?.readyState === WebSocket.OPEN) { + if (socket.readyState === WebSocket.OPEN) { socket.close(); } }; } -} +}); diff --git a/src/routes/(authed)/+layout.svelte b/src/routes/(authed)/+layout.svelte index 9ef40a7..1c696d1 100644 --- a/src/routes/(authed)/+layout.svelte +++ b/src/routes/(authed)/+layout.svelte @@ -7,20 +7,8 @@ import '../layout.css'; import ErrorLayout from '$lib/components/error-layout.svelte'; import { sidebarStore } from '$lib/core/stores/sidebar'; - import { onMount } from 'svelte'; - import { auth } from '$lib/core/stores/auth'; - import { get } from 'svelte/store'; - import { connectToWebsocket } from '$lib/core/stores/websocketStore'; let { children } = $props(); - - onMount(() => { - let currentUser = get(auth); - console.log(`on mount layout current user: ${JSON.stringify(currentUser)}`); - if (currentUser) { - connectToWebsocket(); - } - });