From 5450ab671d49b180a07cc195808d335ede4c5252 Mon Sep 17 00:00:00 2001 From: Konrad Kosmatka Date: Sat, 27 Jan 2024 18:27:56 +0100 Subject: [PATCH] Fix read of the TCP socket --- index.js | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 292c2f5..b56bebf 100644 --- a/index.js +++ b/index.js @@ -20,6 +20,7 @@ const { logDebug, logError, logInfo, logWarn } = consoleCmd; let currentUsers = 0; let streamEnabled = false; +let incompleteDataBuffer = ''; /* Audio Stream */ commandExists('ffmpeg') @@ -119,13 +120,29 @@ client.connect(xdrdServerPort, xdrdServerHost, () => { }; client.on('data', (data) => { - const receivedData = data.toString(); + var receivedData = incompleteDataBuffer + data.toString(); + const isIncomplete = (receivedData.slice(-1) != '\n'); - wss.clients.forEach((client) => { - if (client.readyState === WebSocket.OPEN) { - dataHandler.handleData(client, receivedData); + if (isIncomplete) { + const position = receivedData.lastIndexOf('\n'); + if (position < 0) { + incompleteDataBuffer = receivedData; + receivedData = ''; + } else { + incompleteDataBuffer = receivedData.slice(position + 1); + receivedData = receivedData.slice(0, position + 1); } - }); + } else { + incompleteDataBuffer = ''; + } + + if (receivedData.length) { + wss.clients.forEach((client) => { + if (client.readyState === WebSocket.OPEN) { + dataHandler.handleData(client, receivedData); + } + }); + } }); client.on('data', authDataHandler); @@ -168,4 +185,4 @@ httpServer.listen(webServerPort, webServerHost, () => { /* Static data are being sent through here on connection - these don't change when the server is running */ app.get('/static_data', (req, res) => { res.json({ qthLatitude, qthLongitude, webServerName, audioPort, streamEnabled}); -}); \ No newline at end of file +});