Add: CommandParserDispatcher field to Session and SessionReader
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions;
|
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.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.response.PrimitiveResponse;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer;
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.TransportLayer;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -12,6 +13,7 @@ public class Session {
|
|||||||
private final SessionId id;
|
private final SessionId id;
|
||||||
private final TransportLayer transport;
|
private final TransportLayer transport;
|
||||||
private final BlockingQueue<PrimitiveResponse> responseQueue;
|
private final BlockingQueue<PrimitiveResponse> responseQueue;
|
||||||
|
private final CommandParserDispatcher dispatcher;
|
||||||
private static final int RESPOND_QUEUE_SIZE = 32;
|
private static final int RESPOND_QUEUE_SIZE = 32;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,9 +23,11 @@ public class Session {
|
|||||||
* @param eventBus the event bus for publishing events
|
* @param eventBus the event bus for publishing events
|
||||||
* @throws IOException if an I/O error occurs during initialization
|
* @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.id = new SessionId();
|
||||||
this.transport = transport;
|
this.transport = transport;
|
||||||
|
this.dispatcher = dispatcher;
|
||||||
this.responseQueue = new ArrayBlockingQueue<>(RESPOND_QUEUE_SIZE);
|
this.responseQueue = new ArrayBlockingQueue<>(RESPOND_QUEUE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,4 +57,13 @@ public class Session {
|
|||||||
public BlockingQueue<PrimitiveResponse> getResponseQueue() {
|
public BlockingQueue<PrimitiveResponse> getResponseQueue() {
|
||||||
return responseQueue;
|
return responseQueue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the CommandParserDispatcher of this session
|
||||||
|
*
|
||||||
|
* @return the dispatcher to dispatch PrimitiveRequests to for parsing
|
||||||
|
*/
|
||||||
|
public CommandParserDispatcher getDispatcher() {
|
||||||
|
return dispatcher;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -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.DisconnectEvent;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus;
|
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.PrimitiveRequest;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.ProtocolParser;
|
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.ProtocolParserException;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.RawRequest;
|
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.parser.RequestContext;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.RawPacket;
|
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.network.transport.TransportLayer;
|
||||||
@@ -19,12 +21,14 @@ public class SessionReader implements Runnable {
|
|||||||
private final Session session;
|
private final Session session;
|
||||||
private final TransportLayer transport;
|
private final TransportLayer transport;
|
||||||
private final EventBus eventBus;
|
private final EventBus eventBus;
|
||||||
|
private final CommandParserDispatcher dispatcher;
|
||||||
private final Logger logger;
|
private final Logger logger;
|
||||||
|
|
||||||
public SessionReader(Session session, EventBus eventBus) {
|
public SessionReader(Session session, EventBus eventBus) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
this.transport = session.getTransport();
|
this.transport = session.getTransport();
|
||||||
this.eventBus = eventBus;
|
this.eventBus = eventBus;
|
||||||
|
this.dispatcher = session.getDispatcher();
|
||||||
this.logger =
|
this.logger =
|
||||||
LogManager.getLogger(
|
LogManager.getLogger(
|
||||||
SessionReader.class.toString() + "-" + session.getId().value());
|
SessionReader.class.toString() + "-" + session.getId().value());
|
||||||
@@ -46,6 +50,8 @@ public class SessionReader implements Runnable {
|
|||||||
PrimitiveRequest primitiveRequest =
|
PrimitiveRequest primitiveRequest =
|
||||||
new PrimitiveRequest(
|
new PrimitiveRequest(
|
||||||
requestContext, rawRequest.command(), rawRequest.parameters());
|
requestContext, rawRequest.command(), rawRequest.parameters());
|
||||||
|
|
||||||
|
Request request = dispatcher.parse(primitiveRequest);
|
||||||
} catch (EOFException e) {
|
} catch (EOFException e) {
|
||||||
logger.info("Client disconnected");
|
logger.info("Client disconnected");
|
||||||
eventBus.publish(new DisconnectEvent(session.getId()));
|
eventBus.publish(new DisconnectEvent(session.getId()));
|
||||||
|
|||||||
Reference in New Issue
Block a user