From ec5ebe5d42cb19f409632e5a85991f80a5e3d2e3 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Thu, 19 Mar 2026 18:42:34 +0100 Subject: [PATCH] Add: SessionWriter to use queue of session and write to transport --- .../network/sessions/SessionWriter.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionWriter.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionWriter.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionWriter.java new file mode 100644 index 0000000..d886ec8 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/SessionWriter.java @@ -0,0 +1,38 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.response.PrimitiveResponse; +import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.RawPacket; +import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer; +import java.io.IOException; +import java.util.concurrent.BlockingQueue; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class SessionWriter implements Runnable { + private final TransportLayer transport; + private final BlockingQueue queue; + private final Logger logger; + + public SessionWriter(Session session) { + this.transport = session.getTransport(); + this.queue = session.getResponseQueue(); + this.logger = + LogManager.getLogger( + SessionReader.class.toString() + "-" + session.getId().value()); + } + + public void run() { + while (!Thread.currentThread().isInterrupted()) { + try { + PrimitiveResponse response = queue.take(); + RawPacket packet = new RawPacket(response.requestId(), response.payload()); + transport.write(packet); + } catch (IOException e) { + logger.trace("Unexpected exception while writing to transport", e); + } catch (InterruptedException e) { + logger.trace("Thread got interrupted", e); + break; + } + } + } +}