This commit is contained in:
thanawat saiyota 2026-03-26 15:47:02 +07:00
commit f4b8df2c27
29 changed files with 693 additions and 97 deletions

View file

@ -7,49 +7,56 @@ import { auth } from '../client/firebase';
import { addNotification } from './noti';
let socket: WebSocket | null = null;
const ENABLE_WS_DEBUG: boolean = false;
export const socketStore = writable<WebSocket | null>(null);
export function connectToWebsocket() {
if (browser) {
console.log('connecting to ', env.PUBLIC_WSS);
socket = new WebSocket(`${env.PUBLIC_WSS}`);
// console.log('connecting to ', env.PUBLIC_WSS);
try {
socket = new WebSocket(`${env.PUBLIC_WSS}`);
socket.addEventListener('open', () => {
socketStore.set(socket);
addNotification('INFO:Connected!');
socket.addEventListener('open', () => {
socketStore.set(socket);
addNotification('INFO:Connected!');
// recover messages on connect, flushing
while (get(msgQueue).length) {
let queue = get(msgQueue);
let current = queue.shift();
if (current && socket) {
socket.send(current);
// set next
msgQueue.set(queue);
// recover messages on connect, flushing
while (get(msgQueue).length) {
let queue = get(msgQueue);
let current = queue.shift();
if (current && socket) {
socket.send(current);
// set next
msgQueue.set(queue);
}
}
});
socket.addEventListener('message', (event) => {
handleIncomingMessages(event.data);
});
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) => {
// console.log('WebSocket error: ', e);
socketStore.set(null);
});
} catch (socket_error: any) {
if (ENABLE_WS_DEBUG) {
console.error('WS_ERR', socket_error);
}
});
socket.addEventListener('message', (event) => {
handleIncomingMessages(event.data);
});
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) => {
console.log('WebSocket error: ', e);
socketStore.set(null);
});
}
return () => {
if (socket?.readyState === WebSocket.OPEN) {