import { AnkFlag } from 'pkg/sdk_client'; import Services from './services/service'; let ws: WebSocket; let messageQueue: string[] = []; export async function initWebsocket(url: string) { ws = new WebSocket(url); if (ws !== null) { ws.onopen = async (event) => { console.log('WebSocket connection established'); while (messageQueue.length > 0) { const message = messageQueue.shift(); if (message) { ws.send(message); } } }; // Listen for messages ws.onmessage = (event) => { const msgData = event.data; // console.log("Received text message: ", msgData); (async () => { if (typeof msgData === 'string') { try { const parsedMessage = JSON.parse(msgData); const services = await Services.getInstance(); switch (parsedMessage.flag) { case 'Init': await services.handleInitMsg(url, parsedMessage.content); break; case 'NewTx': await services.parseNewTx(parsedMessage.content); break; case 'Cipher': await services.parseCipher(parsedMessage.content); break; } } catch (error) { console.error('Received an invalid message:', error); } } else { console.error('Received a non-string message'); } })(); }; // Listen for possible errors ws.onerror = (event) => { console.error('WebSocket error:', event); }; // Listen for when the connection is closed ws.onclose = (event) => { console.log('WebSocket is closed now.'); }; } } // Method to send messages export function sendMessage(flag: AnkFlag, message: string): void { if (ws.readyState === WebSocket.OPEN) { const networkMessage = { flag: flag, content: message, }; console.log('Sending message of type:', flag); ws.send(JSON.stringify(networkMessage)); } else { console.error('WebSocket is not open. ReadyState:', ws.readyState); messageQueue.push(message); } } export function getUrl(): string { return ws.url; } // Method to close the WebSocket connection export function close(): void { ws.close(); }