From b06cd571b03f6feb2f2ce368bb07d41acb0932f6 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Fri, 10 Apr 2026 13:50:09 +0200 Subject: [PATCH] Feat: add "AddPlayer" command --- .../game/add_player/AddPlayerHandler.java | 33 +++++++++++++++++++ .../game/add_player/AddPlayerParser.java | 20 +++++++++++ .../game/add_player/AddPlayerRequest.java | 24 ++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerHandler.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerParser.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerRequest.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerHandler.java new file mode 100644 index 0000000..52a63c7 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerHandler.java @@ -0,0 +1,33 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.add_player; + +import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry; +import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.User; +import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.CommandHandler; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.OkResponse; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.ErrorResponse; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatcher; + +import java.util.Optional; + +/** + * Handler for the ADD_PLAYER command. + */ +public class AddPlayerHandler extends CommandHandler { + private final UserRegistry userRegistry; + + public AddPlayerHandler(UserRegistry userRegistry, ResponseDispatcher responseDispatcher) { + super(responseDispatcher); + this.userRegistry = userRegistry; + } + + @Override + public void execute(AddPlayerRequest request) { + Optional created = userRegistry.registerIfAvailable(request.getName(), request.getContext().sessionId()); + if (created.isEmpty()) { + responseDispatcher.dispatch(new ErrorResponse(request.getContext(), "NAME_TAKEN", "Name already taken")); + return; + } + + responseDispatcher.dispatch(new OkResponse(request.getContext())); + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerParser.java new file mode 100644 index 0000000..eee4c69 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerParser.java @@ -0,0 +1,20 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.add_player; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.CommandParser; +import ch.unibas.dmi.dbis108.casono.server.network.protocol.request.PrimitiveRequest; +import ch.unibas.dmi.dbis108.casono.server.network.protocol.request.accessor.RequestParameterAccessor; +import ch.unibas.dmi.dbis108.casono.server.network.protocol.request.accessor.ParameterParseException; + +/** Parser for the ADD_PLAYER command. */ +public class AddPlayerParser implements CommandParser { + @Override + public AddPlayerRequest parse(PrimitiveRequest primitiveRequest) { + RequestParameterAccessor accessor = new RequestParameterAccessor(primitiveRequest.parameters()); + + String name = accessor.require("NAME"); + + int chips = accessor.require("CHIPS", Integer::parseInt); + + return new AddPlayerRequest(primitiveRequest.context(), name, chips); + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerRequest.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerRequest.java new file mode 100644 index 0000000..8bb90c3 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/game/add_player/AddPlayerRequest.java @@ -0,0 +1,24 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.add_player; + +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 data for the ADD_PLAYER command. */ +public class AddPlayerRequest extends Request { + private final String name; + private final int chips; + + public AddPlayerRequest(RequestContext context, String name, int chips) { + super(context); + this.name = name; + this.chips = chips; + } + + public String getName() { + return name; + } + + public int getChips() { + return chips; + } +}