From 50052b72ffd952aa47afcd8c489f508cfe2d3078 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Sat, 11 Apr 2026 21:11:40 +0200 Subject: [PATCH] Feat: Add get_lobby_listcommand to server --- .../get_lobby_list/GetLobbyListHandler.java | 28 ++++++++++++++ .../get_lobby_list/GetLobbyListParser.java | 17 +++++++++ .../get_lobby_list/GetLobbyListRequest.java | 15 ++++++++ .../get_lobby_list/GetLobbyListResponse.java | 37 +++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListHandler.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListParser.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListRequest.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListResponse.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListHandler.java new file mode 100644 index 0000000..49e49d8 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListHandler.java @@ -0,0 +1,28 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.lobby.get_lobby_list; + +import ch.unibas.dmi.dbis.cs108.casono.server.domain.lobby.LobbyManager; +import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.CommandHandler; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatcher; +import java.util.Collection; + +/** + * Handler for the `GET_LOBBY_LIST` command. + * + *

Queries the {@link LobbyManager} for all available lobbies and dispatches a {@link + * GetLobbyListResponse} containing basic metadata for each lobby (`ID`, `NAME`, `PLAYER_COUNT`). + */ +public class GetLobbyListHandler extends CommandHandler { + private final LobbyManager lobbyManager; + + public GetLobbyListHandler(ResponseDispatcher responseDispatcher, LobbyManager lobbyManager) { + super(responseDispatcher); + this.lobbyManager = lobbyManager; + } + + @Override + public void execute(GetLobbyListRequest request) { + Collection l = + lobbyManager.getAllLobbies(); + responseDispatcher.dispatch(new GetLobbyListResponse(request.getContext(), l)); + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListParser.java new file mode 100644 index 0000000..e6dce38 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListParser.java @@ -0,0 +1,17 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.lobby.get_lobby_list; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.CommandParser; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.PrimitiveRequest; + +/** + * Parser for the `GET_LOBBY_LIST` command. + * + *

Parses the incoming primitive request and produces a {@link GetLobbyListRequest}. This command + * takes no parameters. + */ +public class GetLobbyListParser implements CommandParser { + @Override + public GetLobbyListRequest parse(PrimitiveRequest primitiveRequest) { + return new GetLobbyListRequest(primitiveRequest.context()); + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListRequest.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListRequest.java new file mode 100644 index 0000000..ec41e1d --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListRequest.java @@ -0,0 +1,15 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.lobby.get_lobby_list; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.Request; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.RequestContext; + +/** + * Request object for the `GET_LOBBY_LIST` command. + * + *

Contains only the request context; this command does not require parameters. + */ +public class GetLobbyListRequest extends Request { + public GetLobbyListRequest(RequestContext context) { + super(context); + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListResponse.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListResponse.java new file mode 100644 index 0000000..3737189 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/lobby/get_lobby_list/GetLobbyListResponse.java @@ -0,0 +1,37 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.lobby.get_lobby_list; + +import ch.unibas.dmi.dbis.cs108.casono.server.domain.lobby.Lobby; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.RequestContext; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.SuccessResponse; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.builder.ResponseBody; +import java.util.Collection; + +/** + * Success response for `GET_LOBBY_LIST`. + * + *

Builds a `LOBBIES` collection with repeated `LOBBY` blocks containing `ID`, `NAME` and + * `PLAYER_COUNT`. + */ +public class GetLobbyListResponse extends SuccessResponse { + public GetLobbyListResponse(RequestContext context, Collection lobbies) { + super( + context, + ResponseBody.builder() + .block( + "LOBBIES", + lobbies_block -> { + for (Lobby lobby : lobbies) { + lobbies_block.block( + "LOBBY", + lb -> { + lb.param("ID", lobby.getId().value()); + lb.param("NAME", lobby.getName()); + lb.param( + "PLAYER_COUNT", + lobby.getPlayerNames().size()); + }); + } + }) + .build()); + } +}