Enhance StatusBar and daemon connection management
- Added image preloading for quick access in StatusBar component - Implemented a watcher to reload images when the menu changes - Introduced a delay before sending 'setUserId' to ensure daemon readiness - Improved logging for WebSocket close events and errors
This commit is contained in:
@@ -54,9 +54,21 @@ export default {
|
|||||||
...mapState(["socket", "daemonSocket"]),
|
...mapState(["socket", "daemonSocket"]),
|
||||||
...mapGetters(['menu']),
|
...mapGetters(['menu']),
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
// Wenn sich das Menü ändert, lade die Bilder neu
|
||||||
|
'menu.falukant': {
|
||||||
|
handler() {
|
||||||
|
this.preloadQuickAccessImages();
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
await this.fetchStatus();
|
await this.fetchStatus();
|
||||||
|
|
||||||
|
// Bilder für Schnellzugriff vorladen und cachen
|
||||||
|
this.preloadQuickAccessImages();
|
||||||
|
|
||||||
// Live-Socket-Events
|
// Live-Socket-Events
|
||||||
["falukantUpdateStatus", "stock_change", "familychanged"].forEach(eventName => {
|
["falukantUpdateStatus", "stock_change", "familychanged"].forEach(eventName => {
|
||||||
if (this.daemonSocket) {
|
if (this.daemonSocket) {
|
||||||
@@ -77,6 +89,32 @@ export default {
|
|||||||
// Daemon WebSocket wird automatisch beim Logout geschlossen
|
// Daemon WebSocket wird automatisch beim Logout geschlossen
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
preloadQuickAccessImages() {
|
||||||
|
// Lade alle Schnellzugriffs-Bilder vor, damit sie gecacht werden
|
||||||
|
if (this.menu.falukant && this.menu.falukant.children) {
|
||||||
|
Object.keys(this.menu.falukant.children).forEach(key => {
|
||||||
|
const img = new Image();
|
||||||
|
img.src = `/images/icons/falukant/shortmap/${key}.png`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lade auch andere häufig verwendete Bilder vor
|
||||||
|
const commonImages = [
|
||||||
|
'/images/icons/falukant/messages24.png',
|
||||||
|
'/images/icons/falukant/age.png',
|
||||||
|
// Relationship-Bilder vorladen
|
||||||
|
'/images/icons/falukant/relationship-engaged.png',
|
||||||
|
'/images/icons/falukant/relationship-wooing.png',
|
||||||
|
'/images/icons/falukant/relationship-married.png',
|
||||||
|
'/images/icons/falukant/relationship-widow.png',
|
||||||
|
'/images/icons/falukant/relationship-.png'
|
||||||
|
];
|
||||||
|
|
||||||
|
commonImages.forEach(src => {
|
||||||
|
const img = new Image();
|
||||||
|
img.src = src;
|
||||||
|
});
|
||||||
|
},
|
||||||
async fetchStatus() {
|
async fetchStatus() {
|
||||||
try {
|
try {
|
||||||
const response = await apiClient.get("/api/falukant/info");
|
const response = await apiClient.get("/api/falukant/info");
|
||||||
|
|||||||
@@ -299,17 +299,48 @@ const store = createStore({
|
|||||||
state.daemonRetryTimer = null;
|
state.daemonRetryTimer = null;
|
||||||
}
|
}
|
||||||
commit('setDaemonConnectionStatus', 'connected');
|
commit('setDaemonConnectionStatus', 'connected');
|
||||||
|
|
||||||
|
// Warte kurz, bevor setUserId gesendet wird, damit der Daemon bereit ist
|
||||||
|
// Close-Code 1006 deutet darauf hin, dass der Daemon die Verbindung schließt,
|
||||||
|
// möglicherweise weil setUserId zu früh gesendet wird
|
||||||
|
setTimeout(() => {
|
||||||
|
try {
|
||||||
|
if (daemonSocket.readyState === WebSocket.OPEN && state.isLoggedIn && state.user) {
|
||||||
const payload = JSON.stringify({
|
const payload = JSON.stringify({
|
||||||
event: 'setUserId',
|
event: 'setUserId',
|
||||||
data: { userId: state.user.id }
|
data: { userId: state.user.id }
|
||||||
});
|
});
|
||||||
daemonSocket.send(payload);
|
daemonSocket.send(payload);
|
||||||
|
console.log('[Daemon] setUserId gesendet für User:', state.user.id);
|
||||||
|
} else {
|
||||||
|
console.warn('[Daemon] Socket nicht mehr offen oder Benutzer nicht eingeloggt beim Senden von setUserId');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('[Daemon] Fehler beim Senden von setUserId:', error);
|
||||||
|
}
|
||||||
|
}, 100); // 100ms Delay
|
||||||
};
|
};
|
||||||
|
|
||||||
daemonSocket.onclose = (event) => {
|
daemonSocket.onclose = (event) => {
|
||||||
state.daemonConnecting = false;
|
state.daemonConnecting = false;
|
||||||
commit('setDaemonConnectionStatus', 'disconnected');
|
commit('setDaemonConnectionStatus', 'disconnected');
|
||||||
|
|
||||||
|
// Detailliertes Logging für Close-Events
|
||||||
|
const closeCodeMessages = {
|
||||||
|
1000: 'Normal closure',
|
||||||
|
1001: 'Going away',
|
||||||
|
1002: 'Protocol error',
|
||||||
|
1003: 'Unsupported data',
|
||||||
|
1006: 'Abnormal closure (no close frame received)',
|
||||||
|
1007: 'Invalid data',
|
||||||
|
1008: 'Policy violation',
|
||||||
|
1009: 'Message too big',
|
||||||
|
1010: 'Extension error',
|
||||||
|
1011: 'Internal server error'
|
||||||
|
};
|
||||||
|
const closeMessage = closeCodeMessages[event.code] || `Unknown code: ${event.code}`;
|
||||||
|
console.warn(`[Daemon] Verbindung geschlossen - Code: ${event.code} (${closeMessage}), Reason: ${event.reason || 'none'}, WasClean: ${event.wasClean}, Opened: ${opened}`);
|
||||||
|
|
||||||
// Bereinige Socket-Referenz wenn Verbindung geschlossen wurde
|
// Bereinige Socket-Referenz wenn Verbindung geschlossen wurde
|
||||||
if (state.daemonSocket === daemonSocket) {
|
if (state.daemonSocket === daemonSocket) {
|
||||||
state.daemonSocket = null;
|
state.daemonSocket = null;
|
||||||
@@ -331,6 +362,8 @@ const store = createStore({
|
|||||||
state.daemonConnecting = false;
|
state.daemonConnecting = false;
|
||||||
commit('setDaemonConnectionStatus', 'error');
|
commit('setDaemonConnectionStatus', 'error');
|
||||||
|
|
||||||
|
console.error('[Daemon] WebSocket-Fehler:', error, 'ReadyState:', daemonSocket.readyState, 'URL:', daemonUrl);
|
||||||
|
|
||||||
// Bereinige Socket-Referenz bei Fehler
|
// Bereinige Socket-Referenz bei Fehler
|
||||||
if (state.daemonSocket === daemonSocket) {
|
if (state.daemonSocket === daemonSocket) {
|
||||||
state.daemonSocket = null;
|
state.daemonSocket = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user