Feat: register "Call", "Fold","Bet","Raise","AddPlayer" command and change import locatio nto match new folder structure
This commit is contained in:
@@ -1,5 +1,14 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.casono.server;
|
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.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.CheckUsernameParser;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.check_nick.CheckUsernameRequest;
|
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.PingHandler;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping.PingParser;
|
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.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.UserCleanupJob;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry;
|
import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager;
|
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. */
|
/** Application class for starting the server. */
|
||||||
public class ServerApp {
|
public class ServerApp {
|
||||||
private static final int USER_CLEANUP_JOB_DELAY = 0;
|
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_PERIOD = 10;
|
||||||
private static final int USER_CLEANUP_JOB_RECONNECT_THRESHOLD = 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_DELAY = 0;
|
||||||
private static final int SESSION_DISCONNECT_JOB_PERIOD = 2;
|
private static final int SESSION_DISCONNECT_JOB_PERIOD = 2;
|
||||||
private static final int SESSION_DISCONNECT_JOB_TIMEOUT = 5;
|
private static final int SESSION_DISCONNECT_JOB_TIMEOUT = 5;
|
||||||
|
|
||||||
public static void start(String arg) {
|
public static void start(String arg) {
|
||||||
int port = Integer.parseInt(arg);
|
int port = Integer.parseInt(arg);
|
||||||
|
|
||||||
Logger logger = LogManager.getLogger(ServerApp.class);
|
Logger logger = LogManager.getLogger(ServerApp.class);
|
||||||
logger.info("Starting server at port {}", port);
|
logger.info("Starting server at port {}", port);
|
||||||
|
|
||||||
EventBus eventBus = new EventBus();
|
EventBus eventBus = new EventBus();
|
||||||
CommandParserDispatcher dispatcher = new CommandParserDispatcher();
|
CommandParserDispatcher dispatcher = new CommandParserDispatcher();
|
||||||
SessionManager sessionManager = new SessionManager(eventBus, dispatcher);
|
SessionManager sessionManager = new SessionManager(eventBus, dispatcher);
|
||||||
ResponseDispatcher responseDispatcher = new ResponseDispatcher(sessionManager);
|
ResponseDispatcher responseDispatcher = new ResponseDispatcher(sessionManager);
|
||||||
CommandHandlerExecutor handlerExecutor = new CommandHandlerExecutor(responseDispatcher);
|
CommandHandlerExecutor handlerExecutor = new CommandHandlerExecutor(responseDispatcher);
|
||||||
CommandRouter router = new CommandRouter(handlerExecutor);
|
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();
|
UserRegistry userRegistry = new UserRegistry();
|
||||||
eventBus.subscribe(
|
eventBus.subscribe(
|
||||||
DisconnectEvent.class, event -> userRegistry.onDisconnect(event.sessionId()));
|
DisconnectEvent.class, event -> userRegistry.onDisconnect(event.sessionId()));
|
||||||
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||||
scheduler.scheduleAtFixedRate(
|
scheduler.scheduleAtFixedRate(
|
||||||
new UserCleanupJob(
|
new UserCleanupJob(
|
||||||
userRegistry, Duration.ofSeconds(USER_CLEANUP_JOB_RECONNECT_THRESHOLD)),
|
userRegistry, Duration.ofSeconds(USER_CLEANUP_JOB_RECONNECT_THRESHOLD)),
|
||||||
USER_CLEANUP_JOB_DELAY,
|
USER_CLEANUP_JOB_DELAY,
|
||||||
USER_CLEANUP_JOB_PERIOD,
|
USER_CLEANUP_JOB_PERIOD,
|
||||||
TimeUnit.SECONDS);
|
TimeUnit.SECONDS);
|
||||||
scheduler.scheduleAtFixedRate(
|
scheduler.scheduleAtFixedRate(
|
||||||
new SessionDisconnectJob(
|
new SessionDisconnectJob(
|
||||||
sessionManager,
|
sessionManager,
|
||||||
eventBus,
|
eventBus,
|
||||||
Duration.ofSeconds(SESSION_DISCONNECT_JOB_TIMEOUT)),
|
Duration.ofSeconds(SESSION_DISCONNECT_JOB_TIMEOUT)),
|
||||||
SESSION_DISCONNECT_JOB_DELAY,
|
SESSION_DISCONNECT_JOB_DELAY,
|
||||||
SESSION_DISCONNECT_JOB_PERIOD,
|
SESSION_DISCONNECT_JOB_PERIOD,
|
||||||
TimeUnit.SECONDS);
|
TimeUnit.SECONDS);
|
||||||
|
|
||||||
registerCommands(dispatcher, router, responseDispatcher, userRegistry);
|
registerCommands(dispatcher, router, responseDispatcher, userRegistry);
|
||||||
|
|
||||||
NetworkManager networkManager = new NetworkManager(port, sessionManager, router);
|
NetworkManager networkManager = new NetworkManager(port, sessionManager, router);
|
||||||
networkManager.start();
|
networkManager.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers command parsers and handlers.
|
* Registers command parsers and handlers.
|
||||||
*
|
*
|
||||||
* @param parserDispatcher the dispatcher responsible for parsing incoming commands
|
* @param parserDispatcher the dispatcher responsible for parsing incoming
|
||||||
* @param commandRouter the router that dispatches parsed commands to appropriate handlers
|
* commands
|
||||||
* @param responseDispatcher the dispatcher responsible for sending responses back to clients
|
* @param commandRouter the router that dispatches parsed commands to
|
||||||
*/
|
* appropriate handlers
|
||||||
private static void registerCommands(
|
* @param responseDispatcher the dispatcher responsible for sending responses
|
||||||
CommandParserDispatcher parserDispatcher,
|
* back to clients
|
||||||
CommandRouter commandRouter,
|
*/
|
||||||
ResponseDispatcher responseDispatcher,
|
private static void registerCommands(
|
||||||
UserRegistry userRegistry) {
|
CommandParserDispatcher parserDispatcher,
|
||||||
parserDispatcher.register("PING", new PingParser());
|
CommandRouter commandRouter,
|
||||||
commandRouter.register(PingRequest.class, new PingHandler(responseDispatcher));
|
ResponseDispatcher responseDispatcher,
|
||||||
|
UserRegistry userRegistry) {
|
||||||
|
parserDispatcher.register("PING", new PingParser());
|
||||||
|
commandRouter.register(PingRequest.class, new PingHandler(responseDispatcher));
|
||||||
|
|
||||||
parserDispatcher.register("CHECK_USERNAME", new CheckUsernameParser());
|
parserDispatcher.register("CHECK_USERNAME", new CheckUsernameParser());
|
||||||
commandRouter.register(
|
commandRouter.register(
|
||||||
CheckUsernameRequest.class,
|
CheckUsernameRequest.class,
|
||||||
new CheckUsernameHandler(responseDispatcher, userRegistry));
|
new CheckUsernameHandler(responseDispatcher, userRegistry));
|
||||||
|
|
||||||
parserDispatcher.register("LOGIN", new LoginParser());
|
parserDispatcher.register("LOGIN", new LoginParser());
|
||||||
commandRouter.register(
|
commandRouter.register(
|
||||||
LoginRequest.class, new LoginHandler(responseDispatcher, userRegistry));
|
LoginRequest.class, new LoginHandler(responseDispatcher, userRegistry));
|
||||||
|
|
||||||
parserDispatcher.register("LOGOUT", new LogoutParser());
|
parserDispatcher.register("LOGOUT", new LogoutParser());
|
||||||
commandRouter.register(
|
commandRouter.register(
|
||||||
LogoutRequest.class, new LogoutHandler(responseDispatcher, userRegistry));
|
LogoutRequest.class, new LogoutHandler(responseDispatcher, userRegistry));
|
||||||
|
|
||||||
parserDispatcher.register("LIST_USERS", new ListUsersParser());
|
parserDispatcher.register("LIST_USERS", new ListUsersParser());
|
||||||
commandRouter.register(
|
commandRouter.register(
|
||||||
ListUsersRequest.class, new ListUsersHandler(responseDispatcher, userRegistry));
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.game.add_player;
|
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.dbis.cs108.casono.server.network.command.parsing.CommandParser;
|
||||||
import ch.unibas.dmi.dbis108.casono.server.network.protocol.request.PrimitiveRequest;
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.PrimitiveRequest;
|
||||||
import ch.unibas.dmi.dbis108.casono.server.network.protocol.request.accessor.RequestParameterAccessor;
|
import ch.unibas.dmi.dbis.cs108.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.accessor.ParameterParseException;
|
||||||
|
|
||||||
/** Parser for the ADD_PLAYER command. */
|
/** Parser for the ADD_PLAYER command. */
|
||||||
public class AddPlayerParser implements CommandParser<AddPlayerRequest> {
|
public class AddPlayerParser implements CommandParser<AddPlayerRequest> {
|
||||||
|
|||||||
Reference in New Issue
Block a user