reset connection as every send message

This commit is contained in:
duffyduck 2026-03-29 16:04:43 +02:00
parent da591bb53c
commit 80dec2daf9
1 changed files with 37 additions and 14 deletions

View File

@ -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;
}