diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index 88ee3f3..e793c40 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -131,70 +131,105 @@ const store = createStore({ console.log('πŸ”Œ Initializing Daemon WebSocket connection to:', daemonUrl); const connectDaemonSocket = () => { - try { - const daemonSocket = new WebSocket(daemonUrl, 'yourpart-protocol'); - console.log('πŸ”Œ Protocol: yourpart-protocol'); - - daemonSocket.onopen = () => { - console.log('βœ… Daemon WebSocket connected successfully'); - retryCount = 0; // Reset retry counter on successful connection - const payload = JSON.stringify({ - user_id: state.user.id, - event: 'setUserId', - data: { userId: state.user.id } - }); - daemonSocket.send(payload); - }; + // Protokoll-Fallback: zuerst mit Subprotokoll, dann ohne + const protocols = ['yourpart-protocol', undefined]; + let attemptIndex = 0; - daemonSocket.onclose = (event) => { - console.warn('❌ Daemon WebSocket disconnected:', event.reason); - console.warn('❌ Close details:', { - code: event.code, - reason: event.reason, - wasClean: event.wasClean, - readyState: daemonSocket.readyState - }); - retryConnection(connectDaemonSocket); - }; + const tryConnectWithProtocol = () => { + const currentProtocol = protocols[attemptIndex]; + try { + const daemonSocket = currentProtocol + ? new WebSocket(daemonUrl, currentProtocol) + : new WebSocket(daemonUrl); + console.log('πŸ”Œ Protocol:', currentProtocol ?? 'none (fallback)'); - daemonSocket.onerror = (error) => { - console.error('❌ Daemon WebSocket error:', error); - console.error('❌ Error details:', { - type: error.type, - target: error.target, - readyState: daemonSocket.readyState, - url: daemonSocket.url, - protocol: daemonSocket.protocol - }); - console.error('❌ Browser info:', { - userAgent: navigator.userAgent, - location: window.location.href, - isSecure: window.location.protocol === 'https:' - }); - retryConnection(connectDaemonSocket); - }; + let opened = false; - daemonSocket.addEventListener('message', (event) => { - const message = event.data; - if (message === "ping") { - daemonSocket.send("pong"); - } else { - try { - const data = JSON.parse(message); - // Handle daemon messages here - console.log('πŸ“¨ Daemon message received:', data); - } catch (error) { - console.error("Error parsing daemon message:", error); + daemonSocket.onopen = () => { + opened = true; + console.log('βœ… Daemon WebSocket connected successfully'); + retryCount = 0; // Reset retry counter on successful connection + const payload = JSON.stringify({ + user_id: state.user.id, + event: 'setUserId', + data: { userId: state.user.id } + }); + daemonSocket.send(payload); + }; + + daemonSocket.onclose = (event) => { + console.warn('❌ Daemon WebSocket disconnected:', event.reason); + console.warn('❌ Close details:', { + code: event.code, + reason: event.reason, + wasClean: event.wasClean, + readyState: daemonSocket.readyState + }); + // Falls Verbindungsaufbau nicht offen war und es noch einen Fallback gibt β†’ nΓ€chsten Versuch ohne Subprotokoll + if (!opened && attemptIndex < protocols.length - 1) { + attemptIndex += 1; + console.warn('πŸ”„ Fallback: versuche erneut ohne Subprotokoll...'); + tryConnectWithProtocol(); + return; } - } - }); + retryConnection(connectDaemonSocket); + }; - commit('setDaemonSocket', daemonSocket); - } catch (error) { - console.error('❌ Failed to create Daemon WebSocket:', error); - console.error('❌ URL attempted:', import.meta.env.VITE_DAEMON_SOCKET); - retryConnection(connectDaemonSocket); - } + daemonSocket.onerror = (error) => { + console.error('❌ Daemon WebSocket error:', error); + console.error('❌ Error details:', { + type: error.type, + target: error.target, + readyState: daemonSocket.readyState, + url: daemonSocket.url, + protocol: daemonSocket.protocol + }); + console.error('❌ Browser info:', { + userAgent: navigator.userAgent, + location: window.location.href, + isSecure: window.location.protocol === 'https:' + }); + // Bei Fehler vor Open: Fallback versuchen + if (!opened && attemptIndex < protocols.length - 1) { + attemptIndex += 1; + console.warn('πŸ”„ Fallback: versuche erneut ohne Subprotokoll (onerror)...'); + tryConnectWithProtocol(); + return; + } + retryConnection(connectDaemonSocket); + }; + + daemonSocket.addEventListener('message', (event) => { + const message = event.data; + if (message === "ping") { + daemonSocket.send("pong"); + } else { + try { + const data = JSON.parse(message); + // Handle daemon messages here + console.log('πŸ“¨ Daemon message received:', data); + } catch (error) { + console.error("Error parsing daemon message:", error); + } + } + }); + + commit('setDaemonSocket', daemonSocket); + } catch (error) { + console.error('❌ Failed to create Daemon WebSocket:', error); + console.error('❌ URL attempted:', import.meta.env.VITE_DAEMON_SOCKET); + // Beim Konstruktionsfehler ebenfalls Fallback versuchen + if (attemptIndex < protocols.length - 1) { + attemptIndex += 1; + console.warn('πŸ”„ Fallback: Konstruktion ohne Subprotokoll...'); + tryConnectWithProtocol(); + return; + } + retryConnection(connectDaemonSocket); + } + }; + + tryConnectWithProtocol(); }; let retryCount = 0;