From 68e8bc76b2383ef3e945871b5866fd9f5e1887e0 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Wed, 1 Apr 2026 12:44:37 +0200 Subject: [PATCH 1/5] Add: Wrapper ResponseDispatchException for ResponseDispatcher --- .../response/dispatcher/ResponseDispatchException.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatchException.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatchException.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatchException.java new file mode 100644 index 0000000..6cf4010 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatchException.java @@ -0,0 +1,7 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher; + +public class ResponseDispatchException extends RuntimeException { + public ResponseDispatchException(String message, Throwable cause) { + super(message, cause); + } +} -- 2.52.0 From 4deeace547dbd214913770671a54b5c427fe1c12 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Wed, 1 Apr 2026 12:46:14 +0200 Subject: [PATCH 2/5] Refactor: dispatch method of ResponseDispatcher is now unchecked and throws ResponseDispatchException --- .../protocol/response/dispatcher/ResponseDispatcher.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatcher.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatcher.java index 1be2f27..3679f89 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatcher.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatcher.java @@ -30,9 +30,14 @@ public class ResponseDispatcher { * @throws InterruptedException if the thread is interrupted while waiting to enqueue the * primitive response */ - public void dispatch(Response response) throws InterruptedException { + public void dispatch(Response response) { PrimitiveResponse primitiveResponse = ResponseEncoder.encode(response); Session session = sessionManager.getSessionById(response.getSessionId()); - session.getResponseQueue().put(primitiveResponse); + try { + session.getResponseQueue().put(primitiveResponse); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new ResponseDispatchException("Interrupted while dispatching response", e); + } } } -- 2.52.0 From ae98334c5686e9c48774fd014a5d07303ff65229 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Wed, 1 Apr 2026 12:46:51 +0200 Subject: [PATCH 3/5] Docs: Modify JavaDoc to match changes --- .../protocol/response/dispatcher/ResponseDispatcher.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatcher.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatcher.java index 3679f89..1895d44 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatcher.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/protocol/response/dispatcher/ResponseDispatcher.java @@ -27,8 +27,8 @@ public class ResponseDispatcher { * the target session's response queue. * * @param response the response to dispatch - * @throws InterruptedException if the thread is interrupted while waiting to enqueue the - * primitive response + * @throws ResponseDispatchException wraps any exceptions that occur during dispatching, such as + * the {@link InterruptedException} */ public void dispatch(Response response) { PrimitiveResponse primitiveResponse = ResponseEncoder.encode(response); -- 2.52.0 From df0f8ca44cc833bdfb35b4882013f2cfa179bb74 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Wed, 1 Apr 2026 12:49:07 +0200 Subject: [PATCH 4/5] Add: Handle ResponseDispatchException in SessionReader --- .../cs108/casono/server/network/sessions/SessionReader.java | 5 +++++ 1 file changed, 5 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 9fba8ae..828f29d 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 @@ -14,6 +14,8 @@ import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.Request; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.RequestContext; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.ErrorResponse; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.PrimitiveResponse; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.Response; +import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatchException; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseEncoder; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.RawPacket; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer; @@ -87,6 +89,9 @@ public class SessionReader implements Runnable { requestContext, "UNKNOWN_COMMAND", "This command is unknown to the server.")); + + } catch (ResponseDispatchException e) { + logger.error("Unexpected ResponseDispatchException exception while dispatching request", e); } catch (IOException e) { logger.error("Unexpected IO exception while reading from transport", e); -- 2.52.0 From 3b7b53d97375ec1b73bf15b83c0971b306be3104 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Wed, 1 Apr 2026 12:49:56 +0200 Subject: [PATCH 5/5] Style: Apply Spotless --- .../casono/server/network/sessions/SessionReader.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 828f29d..6fb4378 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 @@ -14,7 +14,6 @@ import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.Request; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.RequestContext; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.ErrorResponse; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.PrimitiveResponse; -import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.Response; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatchException; import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseEncoder; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.RawPacket; @@ -89,9 +88,11 @@ public class SessionReader implements Runnable { requestContext, "UNKNOWN_COMMAND", "This command is unknown to the server.")); - + } catch (ResponseDispatchException e) { - logger.error("Unexpected ResponseDispatchException exception while dispatching request", e); + logger.error( + "Unexpected ResponseDispatchException exception while dispatching request", + e); } catch (IOException e) { logger.error("Unexpected IO exception while reading from transport", e); -- 2.52.0