bugfixing websocket

This commit is contained in:
MuslemRahimi 2024-11-26 20:57:16 +01:00
parent 7479a6810c
commit 1d0e18e56f

View File

@ -188,7 +188,7 @@
socket.addEventListener("open", () => { socket.addEventListener("open", () => {
console.log("WebSocket connection opened"); console.log("WebSocket connection opened");
// Initial connection send // Send only current watchlist symbols
const tickerList = watchList?.map((item) => item?.symbol) || []; const tickerList = watchList?.map((item) => item?.symbol) || [];
sendMessage(tickerList); sendMessage(tickerList);
}); });
@ -200,6 +200,7 @@
if (newList?.length > 0) { if (newList?.length > 0) {
//console.log("Received message:", newList); //console.log("Received message:", newList);
watchList = calculateChange(watchList, newList); watchList = calculateChange(watchList, newList);
setTimeout(() => { setTimeout(() => {
watchList = watchList?.map((item) => ({ watchList = watchList?.map((item) => ({
...item, ...item,
@ -577,29 +578,53 @@
}); });
let previousList = []; let previousList = [];
let reconnectionTimeout;
afterUpdate(async () => { afterUpdate(async () => {
// Compare only the symbols to detect changes
const currentSymbols = watchList?.map((item) => item?.symbol).sort();
const previousSymbols = previousList?.map((item) => item?.symbol).sort();
// Check if symbols have changed
if ( if (
JSON?.stringify(previousList) !== JSON?.stringify(watchList) && JSON.stringify(currentSymbols) !== JSON.stringify(previousSymbols) &&
typeof socket !== "undefined" typeof socket !== "undefined"
) { ) {
// Update previous list
previousList = watchList; previousList = watchList;
socket?.close();
await new Promise((resolve, reject) => {
socket?.addEventListener("close", resolve);
});
if (socket?.readyState === WebSocket?.CLOSED) { try {
await websocketRealtimeData(); // Close existing socket if open
console.log("connecting again"); if (socket && socket.readyState !== WebSocket.CLOSED) {
socket.close();
}
// Wait for socket to close
await new Promise((resolve) => {
socket.addEventListener("close", resolve, { once: true });
});
// Reconnect with new symbols
if ($isOpen) {
await websocketRealtimeData();
console.log("WebSocket restarted due to watchlist changes");
}
} catch (error) {
console.error("Error restarting WebSocket:", error);
} }
} }
}); });
onDestroy(() => { onDestroy(() => {
try { try {
//socket?.send('close') // Clear any pending reconnection timeout
socket?.close(); if (reconnectionTimeout) {
clearTimeout(reconnectionTimeout);
}
// Close the WebSocket connection
if (socket) {
socket.close(1000, "Page unloaded");
}
} catch (e) { } catch (e) {
console.log(e); console.log(e);
} }