From cfd13b43fc6d47fdcc95863216bce6660f3069c0 Mon Sep 17 00:00:00 2001 From: Jona Walpert Date: Fri, 10 Apr 2026 13:52:57 +0200 Subject: [PATCH] Feat: register "Call", "Fold","Bet","Raise","AddPlayer" command and change import locatio nto match new folder structure --- .../dbis/cs108/casono/server/ServerApp.java | 169 +++++++++++------- .../game/add_player/AddPlayerParser.java | 6 +- 2 files changed, 105 insertions(+), 70 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java index 57729a8..a276b2b 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java @@ -1,5 +1,14 @@ package ch.unibas.dmi.dbis.cs108.casono.server; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.add_player.AddPlayerHandler; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.add_player.AddPlayerParser; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.add_player.AddPlayerRequest; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.bet.PlayerBetHandler; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.bet.PlayerBetParser; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.bet.PlayerBetRequest; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.call.PlayerCallHandler; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.call.PlayerCallParser; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.call.PlayerCallRequest; import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.check_nick.CheckUsernameHandler; import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.check_nick.CheckUsernameParser; import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.check_nick.CheckUsernameRequest; @@ -15,6 +24,9 @@ import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.logout.LogoutRequest; import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping.PingHandler; import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping.PingParser; import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping.PingRequest; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.raise.PlayerRaiseHandler; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.raise.PlayerRaiseParser; +import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.raise.PlayerRaiseRequest; import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserCleanupJob; import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry; import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager; @@ -35,83 +47,106 @@ import org.apache.logging.log4j.Logger; /** Application class for starting the server. */ public class ServerApp { - private static final int USER_CLEANUP_JOB_DELAY = 0; - private static final int USER_CLEANUP_JOB_PERIOD = 10; - private static final int USER_CLEANUP_JOB_RECONNECT_THRESHOLD = 10; - private static final int SESSION_DISCONNECT_JOB_DELAY = 0; - private static final int SESSION_DISCONNECT_JOB_PERIOD = 2; - private static final int SESSION_DISCONNECT_JOB_TIMEOUT = 5; + private static final int USER_CLEANUP_JOB_DELAY = 0; + private static final int USER_CLEANUP_JOB_PERIOD = 10; + private static final int USER_CLEANUP_JOB_RECONNECT_THRESHOLD = 10; + private static final int SESSION_DISCONNECT_JOB_DELAY = 0; + private static final int SESSION_DISCONNECT_JOB_PERIOD = 2; + private static final int SESSION_DISCONNECT_JOB_TIMEOUT = 5; - public static void start(String arg) { - int port = Integer.parseInt(arg); + public static void start(String arg) { + int port = Integer.parseInt(arg); - Logger logger = LogManager.getLogger(ServerApp.class); - logger.info("Starting server at port {}", port); + Logger logger = LogManager.getLogger(ServerApp.class); + logger.info("Starting server at port {}", port); - EventBus eventBus = new EventBus(); - CommandParserDispatcher dispatcher = new CommandParserDispatcher(); - SessionManager sessionManager = new SessionManager(eventBus, dispatcher); - ResponseDispatcher responseDispatcher = new ResponseDispatcher(sessionManager); - CommandHandlerExecutor handlerExecutor = new CommandHandlerExecutor(responseDispatcher); - CommandRouter router = new CommandRouter(handlerExecutor); + EventBus eventBus = new EventBus(); + CommandParserDispatcher dispatcher = new CommandParserDispatcher(); + SessionManager sessionManager = new SessionManager(eventBus, dispatcher); + ResponseDispatcher responseDispatcher = new ResponseDispatcher(sessionManager); + CommandHandlerExecutor handlerExecutor = new CommandHandlerExecutor(responseDispatcher); + CommandRouter router = new CommandRouter(handlerExecutor); - eventBus.subscribe(DisconnectEvent.class, event -> sessionManager.onDisconnect(event)); + eventBus.subscribe(DisconnectEvent.class, event -> sessionManager.onDisconnect(event)); - UserRegistry userRegistry = new UserRegistry(); - eventBus.subscribe( - DisconnectEvent.class, event -> userRegistry.onDisconnect(event.sessionId())); - ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - scheduler.scheduleAtFixedRate( - new UserCleanupJob( - userRegistry, Duration.ofSeconds(USER_CLEANUP_JOB_RECONNECT_THRESHOLD)), - USER_CLEANUP_JOB_DELAY, - USER_CLEANUP_JOB_PERIOD, - TimeUnit.SECONDS); - scheduler.scheduleAtFixedRate( - new SessionDisconnectJob( - sessionManager, - eventBus, - Duration.ofSeconds(SESSION_DISCONNECT_JOB_TIMEOUT)), - SESSION_DISCONNECT_JOB_DELAY, - SESSION_DISCONNECT_JOB_PERIOD, - TimeUnit.SECONDS); + UserRegistry userRegistry = new UserRegistry(); + eventBus.subscribe( + DisconnectEvent.class, event -> userRegistry.onDisconnect(event.sessionId())); + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + scheduler.scheduleAtFixedRate( + new UserCleanupJob( + userRegistry, Duration.ofSeconds(USER_CLEANUP_JOB_RECONNECT_THRESHOLD)), + USER_CLEANUP_JOB_DELAY, + USER_CLEANUP_JOB_PERIOD, + TimeUnit.SECONDS); + scheduler.scheduleAtFixedRate( + new SessionDisconnectJob( + sessionManager, + eventBus, + Duration.ofSeconds(SESSION_DISCONNECT_JOB_TIMEOUT)), + SESSION_DISCONNECT_JOB_DELAY, + SESSION_DISCONNECT_JOB_PERIOD, + TimeUnit.SECONDS); - registerCommands(dispatcher, router, responseDispatcher, userRegistry); + registerCommands(dispatcher, router, responseDispatcher, userRegistry); - NetworkManager networkManager = new NetworkManager(port, sessionManager, router); - networkManager.start(); - } + NetworkManager networkManager = new NetworkManager(port, sessionManager, router); + networkManager.start(); + } - /** - * Registers command parsers and handlers. - * - * @param parserDispatcher the dispatcher responsible for parsing incoming commands - * @param commandRouter the router that dispatches parsed commands to appropriate handlers - * @param responseDispatcher the dispatcher responsible for sending responses back to clients - */ - private static void registerCommands( - CommandParserDispatcher parserDispatcher, - CommandRouter commandRouter, - ResponseDispatcher responseDispatcher, - UserRegistry userRegistry) { - parserDispatcher.register("PING", new PingParser()); - commandRouter.register(PingRequest.class, new PingHandler(responseDispatcher)); + /** + * Registers command parsers and handlers. + * + * @param parserDispatcher the dispatcher responsible for parsing incoming + * commands + * @param commandRouter the router that dispatches parsed commands to + * appropriate handlers + * @param responseDispatcher the dispatcher responsible for sending responses + * back to clients + */ + private static void registerCommands( + CommandParserDispatcher parserDispatcher, + CommandRouter commandRouter, + ResponseDispatcher responseDispatcher, + UserRegistry userRegistry) { + parserDispatcher.register("PING", new PingParser()); + commandRouter.register(PingRequest.class, new PingHandler(responseDispatcher)); - parserDispatcher.register("CHECK_USERNAME", new CheckUsernameParser()); - commandRouter.register( - CheckUsernameRequest.class, - new CheckUsernameHandler(responseDispatcher, userRegistry)); + parserDispatcher.register("CHECK_USERNAME", new CheckUsernameParser()); + commandRouter.register( + CheckUsernameRequest.class, + new CheckUsernameHandler(responseDispatcher, userRegistry)); - parserDispatcher.register("LOGIN", new LoginParser()); - commandRouter.register( - LoginRequest.class, new LoginHandler(responseDispatcher, userRegistry)); + parserDispatcher.register("LOGIN", new LoginParser()); + commandRouter.register( + LoginRequest.class, new LoginHandler(responseDispatcher, userRegistry)); - parserDispatcher.register("LOGOUT", new LogoutParser()); - commandRouter.register( - LogoutRequest.class, new LogoutHandler(responseDispatcher, userRegistry)); + parserDispatcher.register("LOGOUT", new LogoutParser()); + commandRouter.register( + LogoutRequest.class, new LogoutHandler(responseDispatcher, userRegistry)); - parserDispatcher.register("LIST_USERS", new ListUsersParser()); - commandRouter.register( - ListUsersRequest.class, new ListUsersHandler(responseDispatcher, userRegistry)); - } + parserDispatcher.register("LIST_USERS", new ListUsersParser()); + commandRouter.register( + ListUsersRequest.class, new ListUsersHandler(responseDispatcher, userRegistry)); + + // ADD_PLAYER + parserDispatcher.register("ADD_PLAYER", new AddPlayerParser()); + commandRouter.register(AddPlayerRequest.class, + new AddPlayerHandler(userRegistry, responseDispatcher)); + + // BET + parserDispatcher.register("BET", new PlayerBetParser()); + commandRouter.register(PlayerBetRequest.class, + new PlayerBetHandler(responseDispatcher)); + + // CALL + parserDispatcher.register("CALL", new PlayerCallParser()); + commandRouter.register(PlayerCallRequest.class, + new PlayerCallHandler(responseDispatcher)); + + // RAISE + parserDispatcher.register("RAISE", new PlayerRaiseParser()); + commandRouter.register(PlayerRaiseRequest.class, + new PlayerRaiseHandler(responseDispatcher)); + } } 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 index eee4c69..68eae33 100644 --- 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 @@ -1,9 +1,9 @@ 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; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.PrimitiveRequest; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.accessor.RequestParameterAccessor; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.accessor.ParameterParseException; /** Parser for the ADD_PLAYER command. */ public class AddPlayerParser implements CommandParser {