From 6635b497706410084085bf73045fbf123cbb284b Mon Sep 17 00:00:00 2001 From: eric <3024947@stud.hs-mannheim.de> Date: Thu, 7 Aug 2025 15:44:14 +0200 Subject: [PATCH] =?UTF-8?q?=C3=9Cberall=20limit=20auswahl=20entfernen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Roullette/controller/GameController.java | 20 ++++++---------- .../eric/Roullette/service/GameService.java | 24 +++++++++---------- .../websocket/GameWebSocketHandler.java | 24 +++++++++---------- src/main/resources/public/create-game.html | 1 - src/main/resources/public/js/create-game.js | 6 ++--- src/main/resources/public/js/game.js | 7 +----- src/main/resources/public/js/join-game.js | 4 +--- .../Roullette/service/GameServiceTest.java | 4 ++-- 8 files changed, 37 insertions(+), 53 deletions(-) diff --git a/src/main/java/eric/Roullette/controller/GameController.java b/src/main/java/eric/Roullette/controller/GameController.java index 1ffed96..cadd609 100644 --- a/src/main/java/eric/Roullette/controller/GameController.java +++ b/src/main/java/eric/Roullette/controller/GameController.java @@ -36,14 +36,13 @@ package eric.Roullette.controller; ctx.status(400).result("username fehlt"); return; } - int limit = body.get("limit") != null ? (int) body.get("limit") : 10; String gameId; do { gameId = String.format("%04d", ThreadLocalRandom.current().nextInt(0, 10000)); } while (gameService.gameExists(gameId)); - gameService.createGame(gameId, limit); - gameService.addPlayer(gameId, user, limit); + gameService.createGame(gameId); + gameService.addPlayer(gameId, user); gameService.broadcastPlayers(gameId); ctx.json(Map.of("status", "ok", "gameId", gameId)); @@ -53,40 +52,35 @@ package eric.Roullette.controller; Map body = ctx.bodyAsClass(Map.class); String user = body.get("username"); String gameId = body.get("gameId"); - int limit = body.get("limit") != null ? Integer.parseInt(body.get("limit")) : 10; if (user == null || gameId == null) { ctx.status(400).result("username oder gameId fehlt"); return; } - gameService.addPlayer(gameId, user, limit); + gameService.addPlayer(gameId, user); gameService.broadcastPlayers(gameId); ctx.json(Map.of("status", "ok")); } private void getPlayers(Context ctx) { String gameId = ctx.pathParam("gameId"); - int limit = Integer.parseInt(Objects.requireNonNull(ctx.queryParam("limit"))); - var game = gameService.getOrCreateGame(gameId, limit); + var game = gameService.getOrCreateGame(gameId); ctx.json(Map.of( - "players", game.players(), - "limit", game.limit() // Limit mitgeben! + "players", game.players() )); } private void startRound(Context ctx) { String gameId = ctx.pathParam("gameId"); - int limit = Integer.parseInt(Objects.requireNonNull(ctx.queryParam("limit"))); ctx.json(Map.of("status", "ok")); - webSocketHandler.broadcastRoundStart(gameId, limit); + webSocketHandler.broadcastRoundStart(gameId); } private void guess(Context ctx) { String gameId = ctx.pathParam("gameId"); - int limit = Integer.parseInt(Objects.requireNonNull(ctx.queryParam("limit"))); Map body = ctx.bodyAsClass(Map.class); String guess = body.get("guess"); String user = body.get("username"); - GameService.Game game = gameService.getOrCreateGame(gameId, limit); + GameService.Game game = gameService.getOrCreateGame(gameId); String owner = game.currentOwner(); if (owner == null || guess == null) { ctx.status(400).result("ungültig"); diff --git a/src/main/java/eric/Roullette/service/GameService.java b/src/main/java/eric/Roullette/service/GameService.java index de9cbbb..8fbd73b 100644 --- a/src/main/java/eric/Roullette/service/GameService.java +++ b/src/main/java/eric/Roullette/service/GameService.java @@ -14,19 +14,19 @@ public class GameService { private final Map games = new ConcurrentHashMap<>(); public record Game(String id, List players, Map scores,String currentOwner, - String currentSong,List allTracks, int limit) { - public static Game create(String id, int limit) { - return new Game(id, new CopyOnWriteArrayList<>(), new ConcurrentHashMap<>(), null, null, new ArrayList<>(), limit); + String currentSong,List allTracks) { + public static Game create(String id) { + return new Game(id, new CopyOnWriteArrayList<>(), new ConcurrentHashMap<>(), null, null, new ArrayList<>()); } } - public Game getOrCreateGame(String gameId, int limit) { - return games.computeIfAbsent(gameId, id -> Game.create(id, limit)); + public Game getOrCreateGame(String gameId) { + return games.computeIfAbsent(gameId, id -> Game.create(id)); } - public void addPlayer(String gameId, String user, int limit) { - Game g = getOrCreateGame(gameId, limit); + public void addPlayer(String gameId, String user) { + Game g = getOrCreateGame(gameId); if (user != null && !g.players().contains(user)) { g.players().add(user); g.scores().putIfAbsent(user, 0); @@ -53,20 +53,20 @@ public class GameService { .forEach(ctx -> ctx.send(JsonUtil.toJson(msg))); } - public void createGame(String gameId, int limit) { - Game game = new Game(gameId, new CopyOnWriteArrayList<>(), new ConcurrentHashMap<>(), null, null, new ArrayList<>(), limit); + public void createGame(String gameId) { + Game game = new Game(gameId, new CopyOnWriteArrayList<>(), new ConcurrentHashMap<>(), null, null, new ArrayList<>()); games.put(gameId, game); } public boolean gameExists(String gameId) { return games.containsKey(gameId); } - public Game startRound(String gameId, List uris, int limit) { - Game g = getOrCreateGame(gameId, limit); + public Game startRound(String gameId, List uris) { + Game g = getOrCreateGame(gameId); if (g.players().isEmpty()) throw new IllegalStateException("No players"); String owner = g.players().get(ThreadLocalRandom.current().nextInt(g.players().size())); String song = uris.get(ThreadLocalRandom.current().nextInt(uris.size())); - Game updated = new Game(gameId, g.players(), g.scores(), owner, song, uris, limit); + Game updated = new Game(gameId, g.players(), g.scores(), owner, song, uris); games.put(gameId, updated); return updated; } diff --git a/src/main/java/eric/Roullette/websocket/GameWebSocketHandler.java b/src/main/java/eric/Roullette/websocket/GameWebSocketHandler.java index 12c11c0..3cb45bc 100644 --- a/src/main/java/eric/Roullette/websocket/GameWebSocketHandler.java +++ b/src/main/java/eric/Roullette/websocket/GameWebSocketHandler.java @@ -36,9 +36,8 @@ public class GameWebSocketHandler { ws.onConnect(ctx -> { String gameId = ctx.pathParam("gameId"); String username = ctx.queryParam("username"); - int limit = Integer.parseInt(Objects.requireNonNull(ctx.queryParam("limit"))); // Spiel- und Session-Registrierung - service.addPlayer(gameId, username, limit); + service.addPlayer(gameId, username); // Alle Clients über neue Spielerliste informieren service.registerSession(gameId, ctx); service.broadcastPlayers(gameId); @@ -53,7 +52,6 @@ public class GameWebSocketHandler { // Eingehende Nachrichten (Guesses & Player-Requests) ws.onMessage(ctx -> { String gameId = ctx.pathParam("gameId"); - int limit = Integer.parseInt(Objects.requireNonNull(ctx.queryParam("limit"))); JsonNode node = JsonUtil.fromJson(ctx.message(), JsonNode.class); String type = node.get("type").asText(); @@ -66,15 +64,15 @@ public class GameWebSocketHandler { .computeIfAbsent(gameId, id -> new ConcurrentHashMap<>()) .put(user, guess); // Wenn alle getippt haben, Ergebnis broadcasten - int numPlayers = service.getOrCreateGame(gameId, limit).players().size(); + int numPlayers = service.getOrCreateGame(gameId).players().size(); if (currentGuesses.get(gameId).size() == numPlayers) { - broadcastRoundResult(gameId, limit); + broadcastRoundResult(gameId); } } case "requestPlayers" -> service.broadcastPlayers(gameId); case "start-round" -> { - var game = service.getOrCreateGame(gameId,limit); + var game = service.getOrCreateGame(gameId); if (game.players().isEmpty()) return; // Songs von allen Spielern sammeln @@ -88,9 +86,9 @@ public class GameWebSocketHandler { } // Runde im Service starten, um Song und Owner zu setzen - service.startRound(gameId, allTracks,limit); + service.startRound(gameId, allTracks); // Jetzt Broadcast mit den aktuellen Daten - broadcastRoundStart(gameId, limit); + broadcastRoundStart(gameId); } } }); @@ -99,8 +97,8 @@ public class GameWebSocketHandler { // ----- Broadcast-Methoden ----- /** Broadcastet den Runden-Start (Song + Optionen) an alle Clients. */ - public void broadcastRoundStart(String gameId, int limit) { - var game = service.getOrCreateGame(gameId,limit); + public void broadcastRoundStart(String gameId) { + var game = service.getOrCreateGame(gameId); List opts = game.players(); String songUri = game.currentSong(); List allTracks = game.allTracks(); @@ -115,8 +113,8 @@ public class GameWebSocketHandler { /** Broadcastet das Rundenergebnis (Scores, wer richtig, wer getippt hat). */ // Punkte für alle Guess-Teilnehmer anpassen -private void broadcastRoundResult(String gameId, int limit) { - var game = service.getOrCreateGame(gameId, limit); +private void broadcastRoundResult(String gameId) { + var game = service.getOrCreateGame(gameId); Map scores = game.scores(); Map guesses = currentGuesses.remove(gameId); String owner = game.currentOwner(); @@ -156,7 +154,7 @@ private void broadcastRoundResult(String gameId, int limit) { // nächste Runde starten new Thread(() -> { try { Thread.sleep(4000); } catch (InterruptedException ignored) {} - broadcastRoundStart(gameId, limit); + broadcastRoundStart(gameId); }).start(); } } diff --git a/src/main/resources/public/create-game.html b/src/main/resources/public/create-game.html index 87ee51e..8d64cd6 100644 --- a/src/main/resources/public/create-game.html +++ b/src/main/resources/public/create-game.html @@ -7,7 +7,6 @@

Neues Spiel erstellen

- diff --git a/src/main/resources/public/js/create-game.js b/src/main/resources/public/js/create-game.js index b6b5dd0..6b3e5ba 100644 --- a/src/main/resources/public/js/create-game.js +++ b/src/main/resources/public/js/create-game.js @@ -10,15 +10,15 @@ if (!username) { } document.getElementById("createGame").addEventListener("click", async () => { - const limit = parseInt(document.getElementById("limit").value, 10); + try { const { status, gameId } = await fetchJson("/api/create-game", { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ username, limit }) + body: JSON.stringify({ username }) }); if (status === "ok") { - window.location.href = `/game.html?gameId=${gameId}&username=${encodeURIComponent(username)}&limit=${limit}`; } else { + window.location.href = `/game.html?gameId=${gameId}&username=${encodeURIComponent(username)}`; } else { alert("Fehler beim Erstellen des Spiels"); } } catch (err) { diff --git a/src/main/resources/public/js/game.js b/src/main/resources/public/js/game.js index c2fa88a..e981523 100644 --- a/src/main/resources/public/js/game.js +++ b/src/main/resources/public/js/game.js @@ -5,12 +5,7 @@ import { setupStartRound } from "./start-round.js"; const gameId = getParam("gameId"); const username = getParam("username"); -const limit = getParam("limit"); -if (!limit) { - alert("Limit fehlt!"); - throw new Error("Missing limit"); -} // 1) Parameter prüfen if (!gameId || !username) { @@ -55,7 +50,7 @@ document.getElementById("gameId").textContent = gameId; // 5) WebSocket einrichten und Spieler laden const protocol = location.protocol === "https:" ? "wss" : "ws"; const socket = new WebSocket( - `${protocol}://${location.host}/ws/${gameId}?username=${encodeURIComponent(username)}&limit=${limit}` + `${protocol}://${location.host}/ws/${gameId}?username=${encodeURIComponent(username)}` ); socket.addEventListener("open", () => { diff --git a/src/main/resources/public/js/join-game.js b/src/main/resources/public/js/join-game.js index 8781e2a..7f44b46 100644 --- a/src/main/resources/public/js/join-game.js +++ b/src/main/resources/public/js/join-game.js @@ -12,14 +12,12 @@ document.getElementById("joinForm").addEventListener("submit", async e => { return; } try { - const res = await fetchJson(`/api/game/${gameId}/players?limit=50`); // Dummy-Limit, Backend ignoriert es beim getOrCreateGame - const limit = res && res.players ? res.limit : 10; // Backend sollte das Limit mitliefern! await fetchJson("/api/join-game", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ gameId, username }) }); - window.location.href = `/game.html?gameId=${gameId}&username=${encodeURIComponent(username)}&limit=${limit}`; + window.location.href = `/game.html?gameId=${gameId}&username=${encodeURIComponent(username)}`; } catch (err) { alert(`Fehler: ${err.message}`); } diff --git a/src/test/java/eric/Roullette/service/GameServiceTest.java b/src/test/java/eric/Roullette/service/GameServiceTest.java index afeddc1..6fa2810 100644 --- a/src/test/java/eric/Roullette/service/GameServiceTest.java +++ b/src/test/java/eric/Roullette/service/GameServiceTest.java @@ -11,11 +11,11 @@ class GameServiceTest { void testGetOrCreateGame() { GameService service = new GameService(); // Erstes Mal anlegen - GameService.Game g1 = service.getOrCreateGame("g1",0); + GameService.Game g1 = service.getOrCreateGame("g1"); assertNotNull(g1); assertEquals("g1", g1.id()); // Beim zweiten Aufruf dieselbe Instanz - GameService.Game g2 = service.getOrCreateGame("g1",0); + GameService.Game g2 = service.getOrCreateGame("g1"); assertSame(g1, g2); }