From 6a6cd7b910eebbbc79b59ec0d0d9b0875349caa3 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 5 Feb 2026 23:37:17 +0100 Subject: [PATCH] Enhance OverviewView component: Added daemonSocket handling for WebSocket events, improved event processing, and removed deprecated production_ready event handling. This update ensures better responsiveness to socket messages and maintains data integrity in the UI. --- frontend/src/views/falukant/OverviewView.vue | 60 ++++++++++++++++---- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/frontend/src/views/falukant/OverviewView.vue b/frontend/src/views/falukant/OverviewView.vue index d144bfe..ea28aac 100644 --- a/frontend/src/views/falukant/OverviewView.vue +++ b/frontend/src/views/falukant/OverviewView.vue @@ -191,7 +191,7 @@ export default { }; }, computed: { - ...mapState(['socket']), + ...mapState(['socket', 'daemonSocket']), getAvatarStyle() { if (!this.falukantUser || !this.falukantUser.character) return {}; const { gender, age } = this.falukantUser.character; @@ -242,7 +242,15 @@ export default { if (newSocket) { this.setupSocketEvents(); } - } + }, + daemonSocket(newSocket, oldSocket) { + if (oldSocket) { + oldSocket.removeEventListener('message', this.handleDaemonMessage); + } + if (newSocket) { + newSocket.addEventListener('message', this.handleDaemonMessage); + } + }, }, async mounted() { await this.fetchFalukantUser(); @@ -252,27 +260,35 @@ export default { await this.fetchAllStock(); await this.fetchProductions(); } - // Daemon WebSocket deaktiviert - verwende Socket.io für alle Events this.setupSocketEvents(); + if (this.daemonSocket) { + this.daemonSocket.addEventListener('message', this.handleDaemonMessage); + } }, beforeUnmount() { + if (this.daemonSocket) { + this.daemonSocket.removeEventListener('message', this.handleDaemonMessage); + } if (this.socket) { this.socket.off("falukantUserUpdated", this.fetchFalukantUser); - this.socket.off("production_ready", this.handleProductionReadyEvent); + this.socket.off("falukantUpdateStatus"); + this.socket.off("falukantBranchUpdate"); + this.socket.off("stock_change"); } - // Daemon WebSocket deaktiviert - keine Cleanup nötig }, methods: { setupSocketEvents() { if (this.socket) { this.socket.on("falukantUserUpdated", this.fetchFalukantUser); - this.socket.on("production_ready", this.handleProductionReadyEvent); this.socket.on("falukantUpdateStatus", (data) => { this.handleEvent({ event: 'falukantUpdateStatus', ...data }); }); this.socket.on("falukantBranchUpdate", (data) => { this.handleEvent({ event: 'falukantBranchUpdate', ...data }); }); + this.socket.on("stock_change", (data) => { + this.handleEvent({ event: 'stock_change', ...data }); + }); } else { // Versuche es nach kurzer Verzögerung erneut setTimeout(() => { @@ -293,11 +309,35 @@ export default { if (age <= 55) return '45-55'; return '55+'; }, - handleEvent(eventData) { + handleDaemonMessage(event) { + if (event.data === 'ping') return; + try { + const message = JSON.parse(event.data); + this.handleEvent(message); + } catch (err) { + console.error('Overview: Error processing daemon message:', err); + } + }, + async handleEvent(eventData) { + if (!this.falukantUser?.character) return; switch (eventData.event) { case 'falukantUpdateStatus': case 'falukantBranchUpdate': - this.fetchFalukantUser(); + await this.fetchFalukantUser(); + if (this.falukantUser?.character) { + await this.fetchProductions(); + await this.fetchAllStock(); + } + break; + case 'production_ready': + case 'production_started': + await this.fetchProductions(); + await this.fetchAllStock(); + break; + case 'stock_change': + case 'selled_items': + await this.fetchProductions(); + await this.fetchAllStock(); break; } }, @@ -326,10 +366,6 @@ export default { } this.allStock = Object.values(aggregated); }, - handleProductionReadyEvent() { - this.fetchAllStock(); - this.fetchProductions(); - }, openBranch(branchId) { this.$router.push({ name: 'BranchView', params: { branchId } }); },