From 29dd7ec80c1790f82d0af00502ef1b70463281d6 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 24 Nov 2025 20:28:11 +0100 Subject: [PATCH] Refactor daemon connection logic and enhance error handling - Simplified fallback logic for daemon URL generation, removing hardcoded values and using dynamic protocol and hostname. - Added detailed error messages for common WebSocket connection issues, improving debugging capabilities. - Updated reconnection warning messages to guide users on potential configuration issues with the daemon server. --- frontend/src/store/index.js | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index ba73670..5fd145b 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -270,20 +270,11 @@ const store = createStore({ // Wenn Umgebungsvariable nicht gesetzt ist oder leer, verwende Fallback-Logik if (!daemonUrl || (typeof daemonUrl === 'string' && daemonUrl.trim() === '')) { - if (isLocalhost) { - // Für lokale Entwicklung: direkte Daemon-Verbindung - daemonUrl = 'ws://127.0.0.1:4551'; - console.log('[Daemon] Verwende localhost-Fallback'); - } else if (isProduction) { - // Für Produktion: wss://www.your-part.de:4551 - daemonUrl = 'wss://www.your-part.de:4551'; - console.log('[Daemon] Verwende Produktions-Fallback'); - } else { - // Fallback: basierend auf Protokoll - const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; - daemonUrl = `${protocol}//${hostname}:4551`; - console.log('[Daemon] Verwende generischen Fallback basierend auf Hostname'); - } + // Fallback: basierend auf Protokoll und Hostname (dynamisch generiert, keine hardcodierten Werte) + const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; + const port = '4551'; + daemonUrl = `${protocol}//${hostname}:${port}`; + console.log('[Daemon] Verwende Fallback basierend auf Hostname und Protokoll'); } else { console.log('[Daemon] Verwende Umgebungsvariable'); } @@ -388,6 +379,17 @@ const store = createStore({ console.error('[Daemon] WebSocket-Fehler:', error, 'ReadyState:', daemonSocket.readyState, 'URL:', daemonUrl); + // Detaillierte Fehlermeldung für häufige Probleme + if (daemonSocket.readyState === WebSocket.CLOSED) { + const urlObj = new URL(daemonUrl); + console.error(`[Daemon] Verbindung fehlgeschlagen zu ${urlObj.hostname}:${urlObj.port}`); + console.error('[Daemon] Mögliche Ursachen:'); + console.error(' - Daemon-Server läuft nicht auf diesem Port'); + console.error(' - Port ist durch Firewall blockiert'); + console.error(' - Falscher Port in VITE_DAEMON_SOCKET'); + console.error(` - Aktuell konfiguriert: ${daemonUrl}`); + } + // Bereinige Socket-Referenz bei Fehler if (state.daemonSocket === daemonSocket) { state.daemonSocket = null; @@ -451,7 +453,12 @@ const store = createStore({ // Maximale Anzahl von Versuchen: 15 const maxRetries = 15; if (state.daemonRetryCount >= maxRetries) { - console.warn(`[Daemon] Maximale Anzahl von Reconnect-Versuchen (${maxRetries}) erreicht. Warte länger...`); + console.warn(`[Daemon] Maximale Anzahl von Reconnect-Versuchen (${maxRetries}) erreicht.`); + console.warn('[Daemon] Bitte prüfen Sie:'); + console.warn(' 1. Läuft der Daemon-Server?'); + console.warn(' 2. Ist der Port in VITE_DAEMON_SOCKET korrekt?'); + console.warn(' 3. Ist der Port durch Firewall/Netzwerk erreichbar?'); + console.warn(` 4. Aktuell konfiguriert: ${import.meta.env?.VITE_DAEMON_SOCKET || 'nicht gesetzt'}`); // Warte länger nach maximalen Versuchen (30 Sekunden) state.daemonRetryCount = 0; // Reset für nächsten Zyklus const delay = 30000;