From 92a2ffe054d9bc0b00916e385cbdc5d72436493a Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Thu, 2 Apr 2026 12:08:40 +0200 Subject: [PATCH 1/6] Add: PingRequest for ping request --- .../casono/server/app/commands/ping/PingRequest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingRequest.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingRequest.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingRequest.java new file mode 100644 index 0000000..a840408 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingRequest.java @@ -0,0 +1,10 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.Request; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.RequestContext; + +public class PingRequest extends Request { + public PingRequest(RequestContext context) { + super(context); + } +} -- 2.52.0 From b445b019a163c2d78991251f0deabbf0b116580f Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Thu, 2 Apr 2026 12:09:01 +0200 Subject: [PATCH 2/6] Add: PingParser to parse PrimitiveRequest into PingRequest --- .../casono/server/app/commands/ping/PingParser.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingParser.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingParser.java new file mode 100644 index 0000000..1e4fb51 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingParser.java @@ -0,0 +1,11 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.CommandParser; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.PrimitiveRequest; + +public class PingParser implements CommandParser { + @Override + public PingRequest parse(PrimitiveRequest primitiveRequest) { + return new PingRequest(primitiveRequest.context()); + } +} -- 2.52.0 From dafa95af4108bc8f56768ceed070100a01edd784 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Thu, 2 Apr 2026 12:09:29 +0200 Subject: [PATCH 3/6] Add: PingHandler to execute PingRequest and dispatch Response --- .../server/app/commands/ping/PingHandler.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingHandler.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingHandler.java new file mode 100644 index 0000000..74f2a21 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingHandler.java @@ -0,0 +1,18 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping; + +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.dispatcher.ResponseDispatcher; + +public class PingHandler implements CommandHandler { + private final ResponseDispatcher responseDispatcher; + + public PingHandler(ResponseDispatcher responseDispatcher) { + this.responseDispatcher = responseDispatcher; + } + + @Override + public void execute(PingRequest request) { + responseDispatcher.dispatch(new OkResponse(request.getContext())); + } +} -- 2.52.0 From 707477bd73c106e1077e7e65338106450a39b955 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Thu, 2 Apr 2026 12:15:01 +0200 Subject: [PATCH 4/6] Add: Integrate PingParser and PingHandler into helper function in composition root --- .../dmi/dbis/cs108/casono/server/ServerApp.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 5687b5b..798c901 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,8 @@ package ch.unibas.dmi.dbis.cs108.casono.server; +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.domain.user.UserCleanupJob; import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry; import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager; @@ -7,6 +10,7 @@ import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.CommandR import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.CommandParserDispatcher; import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent; import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatcher; import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionDisconnectJob; import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionManager; import java.time.Duration; @@ -58,6 +62,18 @@ public class ServerApp { SESSION_DISCONNECT_JOB_PERIOD, TimeUnit.SECONDS); + ResponseDispatcher responseDispatcher = new ResponseDispatcher(sessionManager); + + register_commands(dispatcher, router, responseDispatcher); + networkManager.start(); } + + private static void register_commands( + CommandParserDispatcher parserDispatcher, + CommandRouter commandRouter, + ResponseDispatcher responseDispatcher) { + parserDispatcher.register("PING", new PingParser()); + commandRouter.register(PingRequest.class, new PingHandler(responseDispatcher)); + } } -- 2.52.0 From 87b2dcfc2cd81d72b9749406f4ef06f86cfa4cc9 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Thu, 2 Apr 2026 12:27:11 +0200 Subject: [PATCH 5/6] Docs: Add JavaDoc to newly added components --- .../dmi/dbis/cs108/casono/server/ServerApp.java | 7 +++++++ .../casono/server/app/commands/ping/PingHandler.java | 11 +++++++++++ .../casono/server/app/commands/ping/PingParser.java | 11 +++++++++++ .../casono/server/app/commands/ping/PingRequest.java | 9 +++++++++ 4 files changed, 38 insertions(+) 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 798c901..b100628 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 @@ -69,6 +69,13 @@ public class ServerApp { 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 register_commands( CommandParserDispatcher parserDispatcher, CommandRouter commandRouter, diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingHandler.java index 74f2a21..1669cd8 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingHandler.java @@ -4,13 +4,24 @@ import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.CommandH import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.OkResponse; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatcher; +/** Handler for {@link PingRequest}. */ public class PingHandler implements CommandHandler { private final ResponseDispatcher responseDispatcher; + /** + * Create a new PingHandler to execute {@link PingRequest}s + * + * @param responseDispatcher dispatcher used to send responses back to clients + */ public PingHandler(ResponseDispatcher responseDispatcher) { this.responseDispatcher = responseDispatcher; } + /** + * Execute the ping request. + * + * @param request the ping request to handle + */ @Override public void execute(PingRequest request) { responseDispatcher.dispatch(new OkResponse(request.getContext())); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingParser.java index 1e4fb51..69ab980 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingParser.java @@ -3,7 +3,18 @@ package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping; 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 Ping command. + * + *

Converts a low-level {@link PrimitiveRequest} into a {@link PingRequest}. + */ public class PingParser implements CommandParser { + /** + * Parse the given primitive request into a {@link PingRequest}. + * + * @param primitiveRequest the raw request to parse + * @return {@link PingRequest} + */ @Override public PingRequest parse(PrimitiveRequest primitiveRequest) { return new PingRequest(primitiveRequest.context()); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingRequest.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingRequest.java index a840408..25ab93f 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingRequest.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/app/commands/ping/PingRequest.java @@ -3,7 +3,16 @@ package ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.Request; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.RequestContext; +/** + * Represents a "PING" request sent by a client to check server availability and keep the connection + * alive. + */ public class PingRequest extends Request { + /** + * Constructs a new PingRequest with the given context. + * + * @param context the request context associated with this request + */ public PingRequest(RequestContext context) { super(context); } -- 2.52.0 From 10347b3ed47bc4b522ac7161b81efa9539c9e499 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Thu, 2 Apr 2026 12:43:05 +0200 Subject: [PATCH 6/6] Style: Correct method naming --- .../ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 b100628..4d4f1ec 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 @@ -64,7 +64,7 @@ public class ServerApp { ResponseDispatcher responseDispatcher = new ResponseDispatcher(sessionManager); - register_commands(dispatcher, router, responseDispatcher); + registerCommands(dispatcher, router, responseDispatcher); networkManager.start(); } @@ -76,7 +76,7 @@ public class ServerApp { * @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 register_commands( + private static void registerCommands( CommandParserDispatcher parserDispatcher, CommandRouter commandRouter, ResponseDispatcher responseDispatcher) { -- 2.52.0