Refactor: Entfernen des Daemon WebSocket und Umstellung auf Socket.io für Event-Verarbeitung

Änderungen:
- Der Daemon WebSocket wurde aus der Anwendung entfernt, um die Komplexität zu reduzieren und die Stabilität zu erhöhen.
- Die Event-Verarbeitung in StatusBar.vue und BranchView.vue wurde aktualisiert, um Socket.io für die Registrierung und Verarbeitung von Live-Events zu verwenden.
- Protokollausgaben wurden hinzugefügt, um den Empfang und die Verarbeitung von Events zu dokumentieren.

Diese Anpassungen verbessern die Nachvollziehbarkeit der Event-Verarbeitung und vereinfachen die Codebasis.
This commit is contained in:
Torsten Schulz (local)
2025-09-08 17:02:14 +02:00
parent 0c9f4bb952
commit 6bb4cd3478
5 changed files with 118 additions and 403 deletions

View File

@@ -122,102 +122,91 @@ const store = createStore({
}
},
initializeDaemonSocket({ commit, state }) {
// Daemon WebSocket temporär deaktiviert aufgrund von CORS/Protokoll-Problemen
// Socket.io wird für alle Events verwendet
console.log('🔌 Daemon WebSocket deaktiviert - verwende Socket.io für alle Events');
return;
if (state.isLoggedIn && state.user) {
let currentDaemonSocket = state.daemonSocket;
const connectDaemonSocket = () => {
if (currentDaemonSocket) {
currentDaemonSocket.disconnect();
}
const daemonUrl = import.meta.env.VITE_DAEMON_SOCKET || 'wss://www.your-part.de:4551';
console.log('🔌 Initializing Daemon WebSocket connection to:', daemonUrl);
console.log('🔌 Protocol:', 'yourpart-protocol');
try {
// Versuche zuerst ohne Protokoll, da der Server es möglicherweise nicht unterstützt
let daemonSocket;
try {
console.log('🔌 Trying WebSocket connection without protocol...');
daemonSocket = new WebSocket(daemonUrl);
} catch (error) {
console.error('❌ Failed to create WebSocket:', error);
throw error;
}
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);
};
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);
};
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
});
retryConnection(connectDaemonSocket);
};
daemonSocket.addEventListener('message', (event) => {
const message = event.data;
if (message === "ping") {
daemonSocket.send("pong");
} else {
try {
const data = JSON.parse(message);
} catch (error) {
console.error("Error parsing 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);
retryConnection(connectDaemonSocket);
}
};
let retryCount = 0;
const maxRetries = 5;
const retryConnection = (reconnectFn) => {
if (retryCount >= maxRetries) {
console.error('❌ Max retry attempts reached for Daemon WebSocket');
return;
}
retryCount++;
const delay = Math.min(1000 * Math.pow(2, retryCount - 1), 10000); // Exponential backoff, max 10s
console.log(`🔄 Retrying Daemon WebSocket connection in ${delay}ms (attempt ${retryCount}/${maxRetries})`);
setTimeout(() => {
reconnectFn();
}, delay);
};
connectDaemonSocket();
if (!state.isLoggedIn || !state.user) {
console.log("User is not logged in or user data is not available for Daemon WebSocket.");
return;
}
const daemonUrl = import.meta.env.VITE_DAEMON_SOCKET || 'wss://www.your-part.de:4551';
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);
};
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);
};
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
});
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);
retryConnection(connectDaemonSocket);
}
};
let retryCount = 0;
const maxRetries = 5;
const retryConnection = (reconnectFn) => {
if (retryCount >= maxRetries) {
console.error('❌ Max retry attempts reached for Daemon WebSocket');
return;
}
retryCount++;
const delay = Math.min(1000 * Math.pow(2, retryCount - 1), 10000); // Exponential backoff, max 10s
console.log(`🔄 Retrying Daemon WebSocket connection in ${delay}ms (attempt ${retryCount}/${maxRetries})`);
setTimeout(() => {
reconnectFn();
}, delay);
};
connectDaemonSocket();
},
setLanguage({ commit }, language) {
commit('setLanguage', language);