diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/Session.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/Session.java index 0a9be66..6959ed7 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/Session.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/sessions/Session.java @@ -1,6 +1,7 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions; import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus; +import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.CommandParserDispatcher; import ch.unibas.dmi.dbis.cs108.casono.server.network.response.PrimitiveResponse; import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer; import java.io.IOException; @@ -12,6 +13,7 @@ public class Session { private final SessionId id; private final TransportLayer transport; private final BlockingQueue responseQueue; + private final CommandParserDispatcher dispatcher; private static final int RESPOND_QUEUE_SIZE = 32; /** @@ -21,9 +23,11 @@ public class Session { * @param eventBus the event bus for publishing events * @throws IOException if an I/O error occurs during initialization */ - public Session(TransportLayer transport, EventBus eventBus) { + public Session( + TransportLayer transport, EventBus eventBus, CommandParserDispatcher dispatcher) { this.id = new SessionId(); this.transport = transport; + this.dispatcher = dispatcher; this.responseQueue = new ArrayBlockingQueue<>(RESPOND_QUEUE_SIZE); } @@ -53,4 +57,13 @@ public class Session { public BlockingQueue getResponseQueue() { return responseQueue; } + + /** + * Returns the CommandParserDispatcher of this session + * + * @return the dispatcher to dispatch PrimitiveRequests to for parsing + */ + public CommandParserDispatcher getDispatcher() { + return dispatcher; + } } 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 0abe830..0b21190 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,10 +2,12 @@ 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.CommandParserDispatcher; 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.Request; 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; @@ -19,12 +21,14 @@ public class SessionReader implements Runnable { private final Session session; private final TransportLayer transport; private final EventBus eventBus; + private final CommandParserDispatcher dispatcher; private final Logger logger; public SessionReader(Session session, EventBus eventBus) { this.session = session; this.transport = session.getTransport(); this.eventBus = eventBus; + this.dispatcher = session.getDispatcher(); this.logger = LogManager.getLogger( SessionReader.class.toString() + "-" + session.getId().value()); @@ -46,6 +50,8 @@ public class SessionReader implements Runnable { PrimitiveRequest primitiveRequest = new PrimitiveRequest( requestContext, rawRequest.command(), rawRequest.parameters()); + + Request request = dispatcher.parse(primitiveRequest); } catch (EOFException e) { logger.info("Client disconnected"); eventBus.publish(new DisconnectEvent(session.getId()));