Merge branch 'feat/use-parser-dispatcher-in-reader' into 'main'
Made SessionReader invoke parsing of request with CommandParserDispatcher uppon recieving request Closes #13 See merge request cs108-fs26/Gruppe-13!46
This commit was merged in pull request #202.
This commit is contained in:
@@ -5,6 +5,7 @@ import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry;
|
||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager;
|
||||
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.sessions.SessionManager;
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.Executors;
|
||||
@@ -26,7 +27,8 @@ public class ServerApp {
|
||||
logger.info("Starting server at port {}", port);
|
||||
|
||||
EventBus eventBus = new EventBus();
|
||||
SessionManager sessionManager = new SessionManager(eventBus);
|
||||
CommandParserDispatcher dispatcher = new CommandParserDispatcher();
|
||||
SessionManager sessionManager = new SessionManager(eventBus, dispatcher);
|
||||
eventBus.subscribe(DisconnectEvent.class, event -> sessionManager.onDisconnect(event));
|
||||
NetworkManager networkManager = new NetworkManager(port, sessionManager);
|
||||
|
||||
|
||||
@@ -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<PrimitiveResponse> 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<PrimitiveResponse> getResponseQueue() {
|
||||
return responseQueue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the CommandParserDispatcher of this session
|
||||
*
|
||||
* @return the dispatcher to dispatch PrimitiveRequests to for parsing
|
||||
*/
|
||||
public CommandParserDispatcher getDispatcher() {
|
||||
return dispatcher;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -2,6 +2,7 @@ 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.transport.TransportLayer;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
@@ -14,12 +15,14 @@ public class SessionManager {
|
||||
private Map<SessionId, SessionHandle> sessions;
|
||||
private final EventBus eventBus;
|
||||
private final Logger logger;
|
||||
private final CommandParserDispatcher dispatcher;
|
||||
|
||||
/** Constructs a new SessionManager. */
|
||||
public SessionManager(EventBus eventBus) {
|
||||
public SessionManager(EventBus eventBus, CommandParserDispatcher dispatcher) {
|
||||
this.sessions = new ConcurrentHashMap<>();
|
||||
this.eventBus = eventBus;
|
||||
this.logger = LogManager.getLogger(SessionManager.class);
|
||||
this.dispatcher = dispatcher;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -31,7 +34,7 @@ public class SessionManager {
|
||||
* @return newly created session
|
||||
*/
|
||||
public Session create(TransportLayer transport) {
|
||||
Session session = new Session(transport, eventBus);
|
||||
Session session = new Session(transport, eventBus, dispatcher);
|
||||
SessionReader reader = new SessionReader(session, eventBus);
|
||||
SessionWriter writer = new SessionWriter(session);
|
||||
|
||||
|
||||
+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.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()));
|
||||
|
||||
Reference in New Issue
Block a user