From 89753a74791409007e4a80da9e3ca3a8b5263fee Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Tue, 24 Mar 2026 17:58:21 +0100 Subject: [PATCH 1/7] Add: RequestContext record --- .../cs108/casono/server/network/parser/RequestContext.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RequestContext.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RequestContext.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RequestContext.java new file mode 100644 index 0000000..685407f --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RequestContext.java @@ -0,0 +1,5 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId; + +public record RequestContext(SessionId sessionId, int requestId) {} -- 2.52.0 From db22f12ed581e5eae3294f08eb7883407e4eff2a Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Tue, 24 Mar 2026 18:00:09 +0100 Subject: [PATCH 2/7] Add: RequestContext field to abstract Request class BREAKING CHANGE: Request is now an abstract class instead of an interface --- .../casono/server/network/parser/Request.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java index 4018a31..8b3d70f 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/Request.java @@ -1,4 +1,24 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; +import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId; + /** Request, produced by the CommandParser */ -public interface Request {} +public abstract class Request { + protected final RequestContext context; + + public Request(RequestContext context) { + this.context = context; + } + + public RequestContext getContext() { + return context; + } + + public SessionId getSessionId() { + return context.sessionId(); + } + + public int getRequestId() { + return context.requestId(); + } +} -- 2.52.0 From f4476ae1e8aec2b6fc6bd22e852760a270a3a035 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Tue, 24 Mar 2026 18:03:26 +0100 Subject: [PATCH 3/7] Add: RawRequest record to contain command and parameters --- .../dbis/cs108/casono/server/network/parser/RawRequest.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RawRequest.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RawRequest.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RawRequest.java new file mode 100644 index 0000000..fbbc0e5 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RawRequest.java @@ -0,0 +1,5 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; + +import java.util.List; + +public record RawRequest(String command, List parameters) {} -- 2.52.0 From 34ad8030733a61737b3b21d4eaafb7a677d2aa8a Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Tue, 24 Mar 2026 18:07:20 +0100 Subject: [PATCH 4/7] Refactor: ProtocolParser to accept payload string and return RawRequest Prior it took the RawPacket as an argument and returned an PrimitiveRequest --- .../cs108/casono/server/network/parser/ProtocolParser.java | 7 +++---- .../casono/server/network/sessions/SessionReader.java | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/ProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/ProtocolParser.java index acb48a0..8f8b4d4 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/ProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/ProtocolParser.java @@ -1,6 +1,5 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; -import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.RawPacket; import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.RawToken; import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.Token; import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.TokenClassifier; @@ -19,15 +18,15 @@ public class ProtocolParser { * @param packet the RawPacket containing the recieved data * @return created PrimitiveRequest */ - public static PrimitiveRequest parse(RawPacket packet) { - List rawTokens = Tokenizer.tokenize(packet.payload()); + public static RawRequest parse(String payload) { + List rawTokens = Tokenizer.tokenize(payload); List tokens = TokenClassifier.classify(rawTokens); Iterator iterator = tokens.iterator(); String command = readCommand(iterator); List parameters = readParameters(iterator); - return new PrimitiveRequest(packet.requestId(), command, parameters); + return new RawRequest(command, parameters); } /** diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionReader.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionReader.java index 7c2a6c7..c9aa4aa 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionReader.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionReader.java @@ -2,9 +2,9 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions; 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.parser.PrimitiveRequest; import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.ProtocolParser; import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.ProtocolParserException; +import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.RawRequest; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.RawPacket; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer; import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.TokenizerException; @@ -36,8 +36,8 @@ public class SessionReader implements Runnable { rawPacket = transport.read(); logger.debug("Recieved: {}", rawPacket); - PrimitiveRequest primitiveRequest = ProtocolParser.parse(rawPacket); - logger.debug("Parsed request to {}", primitiveRequest); + RawRequest rawRequest = ProtocolParser.parse(rawPacket.payload()); + logger.debug("Parsed request to {}", rawRequest); } catch (EOFException e) { logger.info("Client disconnected"); eventBus.publish(new DisconnectEvent(session.getId())); -- 2.52.0 From cdd5de620bd8fd1500bc39562041f25ffc5009a5 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Tue, 24 Mar 2026 18:10:15 +0100 Subject: [PATCH 5/7] Add: Create PrimitiveRequest from RawRequest with RequestContext --- .../casono/server/network/sessions/SessionReader.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionReader.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionReader.java index c9aa4aa..0abe830 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionReader.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionReader.java @@ -2,9 +2,11 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions; 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.parser.PrimitiveRequest; import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.ProtocolParser; import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.ProtocolParserException; import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.RawRequest; +import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.RequestContext; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.RawPacket; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer; import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.TokenizerException; @@ -38,6 +40,12 @@ public class SessionReader implements Runnable { RawRequest rawRequest = ProtocolParser.parse(rawPacket.payload()); logger.debug("Parsed request to {}", rawRequest); + + RequestContext requestContext = + new RequestContext(session.getId(), rawPacket.requestId()); + PrimitiveRequest primitiveRequest = + new PrimitiveRequest( + requestContext, rawRequest.command(), rawRequest.parameters()); } catch (EOFException e) { logger.info("Client disconnected"); eventBus.publish(new DisconnectEvent(session.getId())); -- 2.52.0 From edc1b29884bca41bdf2250c3d28914180481dcaf Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Tue, 24 Mar 2026 18:11:37 +0100 Subject: [PATCH 6/7] Add: PrimitiveRequest takes now RequestContext instead of requestId --- .../cs108/casono/server/network/parser/PrimitiveRequest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/PrimitiveRequest.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/PrimitiveRequest.java index 4ac06de..4135e47 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/PrimitiveRequest.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/PrimitiveRequest.java @@ -3,4 +3,5 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; import java.util.List; /** Created by the ProtocolParser to allow easy access to the request contents */ -public record PrimitiveRequest(int requestId, String command, List parameters) {} +public record PrimitiveRequest( + RequestContext context, String command, List parameters) {} -- 2.52.0 From d1510ddf8ea2d4288a4d0fbe6d2e437f8633886c Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Tue, 24 Mar 2026 18:12:02 +0100 Subject: [PATCH 7/7] Docs: Write JavaDoc for RequestContext --- .../casono/server/network/parser/RequestContext.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RequestContext.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RequestContext.java index 685407f..6881885 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RequestContext.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/parser/RequestContext.java @@ -2,4 +2,13 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.parser; import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId; +/** + * Immutable context for a network request. + * + *

Contains the originating session's identifier and the request's id. Later used to create + * response. + * + * @param sessionId the identifier of the session that initiated the request + * @param requestId the request's numeric id within the session + */ public record RequestContext(SessionId sessionId, int requestId) {} -- 2.52.0