From 6dd5840c00903c065af43317740fdf4b5f0181a6 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Sun, 29 Sep 2024 21:45:07 +1000 Subject: [PATCH 1/5] Mono/Stereo symbol --- web/js/main.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/web/js/main.js b/web/js/main.js index 9987716..bd8479e 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -845,7 +845,16 @@ const updateDataElements = throttle(function(parsedData) { } if(parsedData.stForced) { - stereoColor = 'gray'; + if (!parsedData.st) { + stereoColor = 'gray'; + } else { + stereoColor = 'var(--color-4)'; + } + $('.data-st.circle1').css('left', '4px'); + $('.data-st.circle2').css('display', 'none'); + } else { + $('.data-st.circle1').css('left', '0px'); + $('.data-st.circle2').css('display', 'block'); } $dataSt.css('border', '2px solid ' + stereoColor); From 03789b2d8fe5634f67dac4dae48b0ba0e9f95aab Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Mon, 30 Sep 2024 23:27:40 +1000 Subject: [PATCH 2/5] More solutions for WS reconnect on unstable connection --- web/js/main.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/web/js/main.js b/web/js/main.js index bd8479e..aeb6389 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -6,6 +6,10 @@ var parsedData, signalChart, previousFreq; var signalData = []; var data = []; let updateCounter = 0; +let messageCounter = 0; +let messageData = 800; // Inital value anything above 0 +let messageLength = 800; // Retain value of messageData until value is updated +let pingTimeLimit = false; // WebSocket becomes unresponsive with high ping const europe_programmes = [ "No PTY", "News", "Current Affairs", "Info", @@ -254,18 +258,66 @@ function getServerTime() { } function sendPingRequest() { + const timeoutDuration = 15000; // Ping response can become buggy if it exceeds 20 seconds const startTime = new Date().getTime(); + + const fetchWithTimeout = (url, options, timeout = timeoutDuration) => { + return new Promise((resolve, reject) => { + const timerTimeout = setTimeout(() => { + reject(new Error('Request timed out')); + }, timeout); - fetch('./ping') + fetch(url, options) + .then(response => { + clearTimeout(timerTimeout); + resolve(response); + }) + .catch(error => { + clearTimeout(timerTimeout); + reject(error); + }); + }); + }; + + fetchWithTimeout('./ping', { cache: 'no-store' }, timeoutDuration) .then(response => { const endTime = new Date().getTime(); const pingTime = endTime - startTime; $('#current-ping').text(`Ping: ${pingTime}ms`); + pingTimeLimit = false; }) .catch(error => { - console.error('Error fetching ping:', error); + console.warn('Ping request failed'); + $('#current-ping').text(`Ping: unknown`); + if (!pingTimeLimit) { // Force reconnection as WebSocket could be unresponsive even though it's reported as OPEN + window.socket.close(1000, 'Normal closure'); + sendToast('warning', 'Connection lost', 'Attempting to reconnect...', false, false); + console.log("Reconnecting due to high ping..."); + pingTimeLimit = true; + } }); + function handleMessage(message) { + messageData = JSON.parse(message.data.length); + socket.removeEventListener('message', handleMessage); + } + socket.addEventListener('message', handleMessage); + messageLength = messageData; + messageData = 0; + + // Force reconnection if no WebSocket data after several queries + if (messageLength === 0) { + messageCounter++; + if (messageCounter === 5) { + messageCounter = 0; + window.socket.close(1000, 'Normal closure'); + sendToast('warning', 'Connection lost', 'Attempting to reconnect...', false, false); + console.log("Reconnecting due to no data received..."); + } + } else { + messageCounter = 0; + } + // Automatic reconnection on WebSocket close if (socket.readyState === WebSocket.CLOSED || socket.readyState === WebSocket.CLOSING) { socket = new WebSocket(socketAddress); From d029cbd5acdf9c91c5eb4d8cf64aba3444fb9f7c Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Mon, 30 Sep 2024 23:34:53 +1000 Subject: [PATCH 3/5] More solutions for WS reconnect on unstable connection --- web/js/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/js/main.js b/web/js/main.js index aeb6389..17e107e 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -6,8 +6,8 @@ var parsedData, signalChart, previousFreq; var signalData = []; var data = []; let updateCounter = 0; -let messageCounter = 0; -let messageData = 800; // Inital value anything above 0 +let messageCounter = 0; // Count for WebSocket data length returning 0 +let messageData = 800; // Initial value anything above 0 let messageLength = 800; // Retain value of messageData until value is updated let pingTimeLimit = false; // WebSocket becomes unresponsive with high ping From 9591c7e51a704bdd9ed404007cac4e10004f514a Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:34:42 +1000 Subject: [PATCH 4/5] More solutions for WS reconnect on unstable connection --- web/js/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/js/main.js b/web/js/main.js index 17e107e..22bb828 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -291,7 +291,7 @@ function sendPingRequest() { $('#current-ping').text(`Ping: unknown`); if (!pingTimeLimit) { // Force reconnection as WebSocket could be unresponsive even though it's reported as OPEN window.socket.close(1000, 'Normal closure'); - sendToast('warning', 'Connection lost', 'Attempting to reconnect...', false, false); + if (connectionLost) sendToast('warning', 'Connection lost', 'Attempting to reconnect...', false, false); console.log("Reconnecting due to high ping..."); pingTimeLimit = true; } @@ -311,7 +311,7 @@ function sendPingRequest() { if (messageCounter === 5) { messageCounter = 0; window.socket.close(1000, 'Normal closure'); - sendToast('warning', 'Connection lost', 'Attempting to reconnect...', false, false); + if (connectionLost) sendToast('warning', 'Connection lost', 'Attempting to reconnect...', false, false); console.log("Reconnecting due to no data received..."); } } else { From 988e2739a70470af3956d1135722f03663a52688 Mon Sep 17 00:00:00 2001 From: Amateur Audio Dude <168192910+AmateurAudioDude@users.noreply.github.com> Date: Tue, 1 Oct 2024 23:38:57 +1000 Subject: [PATCH 5/5] More solutions for WS reconnect on unstable connection --- web/js/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/js/main.js b/web/js/main.js index 22bb828..a008dc8 100644 --- a/web/js/main.js +++ b/web/js/main.js @@ -290,7 +290,7 @@ function sendPingRequest() { console.warn('Ping request failed'); $('#current-ping').text(`Ping: unknown`); if (!pingTimeLimit) { // Force reconnection as WebSocket could be unresponsive even though it's reported as OPEN - window.socket.close(1000, 'Normal closure'); + if (messageLength === 0) window.socket.close(1000, 'Normal closure'); if (connectionLost) sendToast('warning', 'Connection lost', 'Attempting to reconnect...', false, false); console.log("Reconnecting due to high ping..."); pingTimeLimit = true;