From 80dec2daf902b621c69a8013b53bf7cbc398dfd4 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sun, 29 Mar 2026 16:04:43 +0200 Subject: [PATCH] reset connection as every send message --- diagnostic/server.js | 51 ++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/diagnostic/server.js b/diagnostic/server.js index 43f261f..2f0664e 100644 --- a/diagnostic/server.js +++ b/diagnostic/server.js @@ -428,13 +428,7 @@ function sendToGateway(text, isPipeline) { if (isPipeline) plog(`chat.send [${reqId}] an Gateway gesendet — warte auf ACK...`); // Nachricht auch an RVS senden damit die App sie sieht - if (rvsWs && rvsWs.readyState === WebSocket.OPEN) { - rvsWs.send(JSON.stringify({ - type: "chat", - payload: { text, sender: "diagnostic" }, - timestamp: Date.now(), - })); - } + sendToRVS(text, false); return true; } @@ -540,21 +534,50 @@ function connectRVS(forcePlain) { } function sendToRVS(text, isPipeline) { - log("info", "rvs", `sendToRVS: rvsWs=${rvsWs ? 'exists' : 'null'}, readyState=${rvsWs ? rvsWs.readyState : 'N/A'}, OPEN=${WebSocket.OPEN}`); - if (!rvsWs || rvsWs.readyState !== WebSocket.OPEN) { - log("error", "rvs", `Nicht verbunden (readyState: ${rvsWs ? rvsWs.readyState : 'null'})`); - if (isPipeline) pipelineEnd(false, "RVS nicht verbunden"); + if (!RVS_HOST || !RVS_TOKEN) { + log("error", "rvs", "Nicht konfiguriert"); + if (isPipeline) pipelineEnd(false, "RVS nicht konfiguriert"); return false; } + // Frische WebSocket-Verbindung fuer jede Nachricht (Zombie-Schutz) + const proto = RVS_TLS === "true" ? "wss" : "ws"; + const url = `${proto}://${RVS_HOST}:${RVS_PORT}?token=${RVS_TOKEN}`; const msg = JSON.stringify({ type: "chat", payload: { text, sender: "diagnostic" }, timestamp: Date.now(), }); - log("info", "rvs", `Sende ${msg.length} bytes an RVS...`); - rvsWs.send(msg); - log("info", "rvs", `Gesendet via RVS: "${text}"`); + + log("info", "rvs", `Sende via frische Verbindung: ${url.split('?')[0]}`); + + const freshWs = new WebSocket(url); + freshWs.on("open", () => { + freshWs.send(msg); + log("info", "rvs", `Gesendet via RVS: "${text}"`); + // Verbindung offen lassen fuer Antwort-Empfang, nach 5min schliessen + setTimeout(() => { try { freshWs.close(); } catch (_) {} }, 300000); + }); + freshWs.on("message", (raw) => { + try { + const resp = JSON.parse(raw.toString()); + if (resp.type === "chat" && resp.payload) { + const sender = resp.payload.sender || "?"; + log("info", "rvs", `Chat von ${sender}: "${(resp.payload.text || "").slice(0, 100)}"`); + if (pipelineActive && sender !== "diagnostic") { + pipelineEnd(true, `Antwort via RVS von ${sender}: "${(resp.payload.text || "").slice(0, 120)}"`); + } + broadcast({ type: "rvs_chat", msg: resp }); + } else if (resp.type !== "heartbeat") { + log("debug", "rvs", `Nachricht: ${JSON.stringify(resp).slice(0, 150)}`); + } + } catch {} + }); + freshWs.on("error", (err) => { + log("error", "rvs", `Sende-Fehler: ${err.message}`); + if (isPipeline) pipelineEnd(false, `RVS Fehler: ${err.message}`); + }); + if (isPipeline) plog(`Nachricht an RVS gesendet — warte auf Antwort via RVS...`); return true; }