verhindern dass mehrere gleichzeitig runde starten drücken
parent
b2627984af
commit
b55314fd1a
|
|
@ -132,7 +132,8 @@ public class GameController {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
boolean correct = guess.equals(owner);
|
boolean correct = guess.equals(owner);
|
||||||
if (correct) game.scores().merge(user, 1, Integer::sum);
|
game.scores().merge(user, correct ? 3 : -1, Integer::sum); // an WS-Logik angeglichen
|
||||||
|
//if (correct) game.scores().merge(user, 3, Integer::sum);
|
||||||
ctx.json(Map.of(
|
ctx.json(Map.of(
|
||||||
"correct", correct,
|
"correct", correct,
|
||||||
"owner", owner,
|
"owner", owner,
|
||||||
|
|
@ -152,7 +153,11 @@ public class GameController {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//String accessToken = authService.getAccessTokenForUser(username);
|
//String accessToken = authService.getAccessTokenForUser(username);
|
||||||
String accessToken = userAccessTokens.get(username);
|
String accessToken = userAccessTokens.computeIfAbsent(username, authService::getAccessTokenForUser);
|
||||||
|
if (accessToken == null || accessToken.isBlank()) {
|
||||||
|
ctx.status(401).result("Kein Zugriffstoken für " + username); return;
|
||||||
|
}
|
||||||
|
//String accessToken = userAccessTokens.get(username);
|
||||||
OkHttpClient client = httpClient;
|
OkHttpClient client = httpClient;
|
||||||
String trackId = trackUri.split(":")[2];
|
String trackId = trackUri.split(":")[2];
|
||||||
Request getTrack = new Request.Builder()
|
Request getTrack = new Request.Builder()
|
||||||
|
|
|
||||||
|
|
@ -145,10 +145,10 @@ public class GameWebSocketHandler {
|
||||||
allTracks.addAll(game.playerTracks().getOrDefault(player, List.of()));
|
allTracks.addAll(game.playerTracks().getOrDefault(player, List.of()));
|
||||||
}
|
}
|
||||||
if (allTracks.isEmpty()) {
|
if (allTracks.isEmpty()) {
|
||||||
// TODO: Fehler an Client senden, dass keine Songs da sind
|
broadcastToAll(gameId, JsonUtil.toJson(Map.of("type","error","message","Keine Tracks geladen")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO funktionalität bei neu joinenden Spielern überprüfen
|
|
||||||
// Runde im Service starten, um Song und Owner zu setzen
|
// Runde im Service starten, um Song und Owner zu setzen
|
||||||
service.startRound(gameId, allTracks);
|
service.startRound(gameId, allTracks);
|
||||||
// Jetzt Broadcast mit den aktuellen Daten
|
// Jetzt Broadcast mit den aktuellen Daten
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,29 @@
|
||||||
// public/js/start-round.js
|
// javascript
|
||||||
|
import { getParam } from "./utils.js";
|
||||||
|
|
||||||
import { getParam } from "./utils.js";
|
export function setupStartRound(socket) {
|
||||||
|
const gameId = getParam("gameId");
|
||||||
|
const startBtn = document.getElementById("startRound");
|
||||||
|
if (!startBtn || !gameId) return;
|
||||||
|
|
||||||
/**
|
// Mehrfaches Registrieren verhindern
|
||||||
* Bindet den Klick-Handler an den "Runde starten"-Button,
|
if (startBtn.dataset.handlerAttached === "1") return;
|
||||||
* der per WebSocket an den Server das Start-Event feuert.
|
startBtn.dataset.handlerAttached = "1";
|
||||||
* @param {WebSocket} socket – die geöffnete WS-Verbindung
|
|
||||||
*/
|
|
||||||
export function setupStartRound(socket) {
|
|
||||||
const gameId = getParam("gameId");
|
|
||||||
if (!gameId || socket.readyState !== WebSocket.OPEN) return;
|
|
||||||
|
|
||||||
const startBtn = document.getElementById("startRound");
|
startBtn.onclick = async () => {
|
||||||
startBtn.addEventListener("click", () => {
|
if (startBtn.disabled) return;
|
||||||
// Button direkt deaktivieren, bis neue Runde kommt
|
startBtn.disabled = true; // Doppelklick verhindern
|
||||||
startBtn.disabled = true;
|
|
||||||
|
|
||||||
// Sende das Start-Runden-Event an den Server
|
try {
|
||||||
socket.send(JSON.stringify({
|
if (socket && socket.readyState === WebSocket.OPEN) {
|
||||||
type: "start-round",
|
socket.send(JSON.stringify({ type: "start-round" }));
|
||||||
gameId: gameId
|
} else {
|
||||||
}));
|
await fetch(`/api/game/${encodeURIComponent(gameId)}/start-round`, { method: "POST" });
|
||||||
});
|
}
|
||||||
}
|
// UI-Änderungen (hidden usw.) macht bereits handleRoundStart in game.js
|
||||||
|
} catch (_) {
|
||||||
|
// Bei Fehler kurz reaktivieren, damit der Nutzer erneut versuchen kann
|
||||||
|
setTimeout(() => { startBtn.disabled = false; }, 1200);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue