Änderung: Hinzufügen von TaxiHighscore-Logik und Verbesserung der API-Integration

Änderungen:
- Implementierung des neuen Routers für TaxiHighscore zur Verwaltung von Highscore-Daten.
- Anpassung der Datenbankmodelle zur Unterstützung von TaxiHighscore-Associations.
- Erweiterung der Vue-Komponenten zur Anzeige und Speicherung von Highscores im Taxi-Spiel.
- Verbesserung der Statusanzeige im AppHeader zur besseren Benutzerinteraktion.

Diese Anpassungen erweitern die Spielmechanik und Benutzererfahrung, indem sie die Verwaltung von Highscores integrieren und die Benutzeroberfläche optimieren.
This commit is contained in:
Torsten Schulz (local)
2025-10-05 00:04:28 +02:00
parent 75d7ac6222
commit 42349e46c8
12 changed files with 775 additions and 79 deletions

View File

@@ -9,6 +9,7 @@ const store = createStore({
state: {
isLoggedIn: localStorage.getItem('isLoggedIn') === 'true',
connectionStatus: 'disconnected', // 'connected', 'connecting', 'disconnected', 'error'
daemonConnectionStatus: 'disconnected', // 'connected', 'connecting', 'disconnected', 'error'
user: JSON.parse(localStorage.getItem('user')) || null,
language: (() => {
// Verwende die gleiche Logik wie in main.js
@@ -103,6 +104,9 @@ const store = createStore({
setConnectionStatus(state, status) {
state.connectionStatus = status;
},
setDaemonConnectionStatus(state, status) {
state.daemonConnectionStatus = status;
},
clearSocket(state) {
if (state.socket) {
state.socket.disconnect();
@@ -117,6 +121,7 @@ const store = createStore({
state.daemonSocket.close();
}
state.daemonSocket = null;
state.daemonConnectionStatus = 'disconnected';
},
},
actions: {
@@ -180,11 +185,18 @@ const store = createStore({
let retryCount = 0;
const maxRetries = 10;
const retryConnection = (reconnectFn) => {
console.log(`Reconnect-Versuch ${retryCount + 1}/${maxRetries}`);
if (retryCount >= maxRetries) {
// Nach maxRetries alle 5 Sekunden weiter versuchen
console.log('Max Retries erreicht, versuche weiter alle 5 Sekunden...');
setTimeout(() => {
reconnectFn();
}, 5000);
return;
}
retryCount++;
const delay = Math.min(1000 * Math.pow(1.5, retryCount - 1), 30000); // Exponential backoff, max 30s
const delay = 5000; // Alle 5 Sekunden versuchen
console.log(`Warte ${delay}ms bis zum nächsten Reconnect-Versuch...`);
setTimeout(() => {
reconnectFn();
}, delay);
@@ -220,6 +232,7 @@ const store = createStore({
const tryConnectWithProtocol = () => {
const currentProtocol = protocols[attemptIndex];
try {
commit('setDaemonConnectionStatus', 'connecting');
const daemonSocket = currentProtocol
? new WebSocket(daemonUrl, currentProtocol)
: new WebSocket(daemonUrl);
@@ -229,8 +242,8 @@ const store = createStore({
daemonSocket.onopen = () => {
opened = true;
retryCount = 0; // Reset retry counter on successful connection
commit('setDaemonConnectionStatus', 'connected');
const payload = JSON.stringify({
user_id: state.user.id,
event: 'setUserId',
data: { userId: state.user.id }
});
@@ -238,6 +251,7 @@ const store = createStore({
};
daemonSocket.onclose = (event) => {
commit('setDaemonConnectionStatus', 'disconnected');
// Falls Verbindungsaufbau nicht offen war und es noch einen Fallback gibt → nächsten Versuch ohne Subprotokoll
if (!opened && attemptIndex < protocols.length - 1) {
attemptIndex += 1;
@@ -248,6 +262,7 @@ const store = createStore({
};
daemonSocket.onerror = (error) => {
commit('setDaemonConnectionStatus', 'error');
// Bei Fehler vor Open: Fallback versuchen
if (!opened && attemptIndex < protocols.length - 1) {
attemptIndex += 1;
@@ -289,16 +304,18 @@ const store = createStore({
let retryCount = 0;
const maxRetries = 15; // Increased max retries
const retryConnection = (reconnectFn) => {
console.log(`Daemon-Reconnect-Versuch ${retryCount + 1}/${maxRetries}`);
if (retryCount >= maxRetries) {
// Reset counter after a longer delay to allow for network recovery
// Nach maxRetries alle 5 Sekunden weiter versuchen
console.log('Daemon: Max Retries erreicht, versuche weiter alle 5 Sekunden...');
setTimeout(() => {
retryCount = 0;
reconnectFn();
}, 60000); // Wait 1 minute before resetting
}, 5000);
return;
}
retryCount++;
const delay = Math.min(1000 * Math.pow(1.5, retryCount - 1), 30000); // Exponential backoff, max 30s
const delay = 5000; // Alle 5 Sekunden versuchen
console.log(`Daemon: Warte ${delay}ms bis zum nächsten Reconnect-Versuch...`);
setTimeout(() => {
reconnectFn();
}, delay);
@@ -326,6 +343,7 @@ const store = createStore({
daemonSocket: state => state.daemonSocket,
menuNeedsUpdate: state => state.menuNeedsUpdate,
connectionStatus: state => state.connectionStatus,
daemonConnectionStatus: state => state.daemonConnectionStatus,
},
modules: {
dialogs,