Merge pull request #93 from AmateurAudioDude/fixes/v1.3.1-serialport-reconnect-fix

Delay reconnect loss monitoring on startup and improved time checking
This commit is contained in:
Marek Farkaš
2024-10-10 20:23:33 +02:00
committed by GitHub
+25 -2
View File
@@ -256,6 +256,11 @@ var lastUpdateTime = Date.now();
const initialData = { ...dataToSend }; const initialData = { ...dataToSend };
const resetToDefault = dataToSend => Object.assign(dataToSend, initialData); const resetToDefault = dataToSend => Object.assign(dataToSend, initialData);
// Serialport reconnect variables
const ServerStartTime = process.hrtime();
var serialportUpdateTime = process.hrtime();
let checkSerialport = false;
function handleData(wss, receivedData, rdsWss) { function handleData(wss, receivedData, rdsWss) {
// Retrieve the last update time for this client // Retrieve the last update time for this client
@@ -422,6 +427,7 @@ function handleData(wss, receivedData, rdsWss) {
client.send(dataToSendJSON); client.send(dataToSendJSON);
}); });
lastUpdateTime = Date.now(); lastUpdateTime = Date.now();
serialportUpdateTime = process.hrtime();
} }
} }
@@ -430,13 +436,30 @@ isSerialportAlive = true;
lastFrequencyAlive = '87.500'; lastFrequencyAlive = '87.500';
setInterval(() => { setInterval(() => {
lastFrequencyAlive = initialData.freq; lastFrequencyAlive = initialData.freq;
// Activate serialport retry if handleData has not been executed for over 10 seconds const serialportElapsedTime = process.hrtime(serialportUpdateTime)[0];
if (((Date.now() - lastUpdateTime) > 8000) && !isSerialportRetrying && serverConfig.xdrd.wirelessConnection === false) { // Activate serialport retry if handleData has not been executed for over 8 seconds
if (checkSerialport && (serialportElapsedTime > 8) && !isSerialportRetrying && serverConfig.xdrd.wirelessConnection === false) {
isSerialportAlive = false; isSerialportAlive = false;
isSerialportRetrying = true; isSerialportRetrying = true;
} }
}, 2000); }, 2000);
// Delay checking Serialport status on startup for 10 seconds
async function checkSerialPortStatus() {
const ServerStartTime = process.hrtime();
while (!checkSerialport) {
const ServerElapsedSeconds = process.hrtime(ServerStartTime)[0];
if (ServerElapsedSeconds > 10) {
checkSerialport = true;
}
await new Promise(resolve => setTimeout(resolve, 100));
}
}
checkSerialPortStatus();
function showOnlineUsers(currentUsers) { function showOnlineUsers(currentUsers) {
dataToSend.users = currentUsers; dataToSend.users = currentUsers;
initialData.users = currentUsers; initialData.users = currentUsers;