Feat/ms 4 integration #282
+28
-15
@@ -21,6 +21,7 @@ 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;
|
||||||
import java.io.EOFException;
|
import java.io.EOFException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.SocketException;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
@@ -50,29 +51,21 @@ public class SessionReader implements Runnable {
|
|||||||
RawRequest rawRequest = null;
|
RawRequest rawRequest = null;
|
||||||
RequestContext requestContext = null;
|
RequestContext requestContext = null;
|
||||||
try {
|
try {
|
||||||
// Step 1: Read from transport
|
|
||||||
rawPacket = transport.read();
|
rawPacket = transport.read();
|
||||||
session.updateLastInboundActivity();
|
session.updateLastInboundActivity();
|
||||||
logger.debug("Recieved: {}", rawPacket);
|
logger.debug("Recieved: {}", rawPacket);
|
||||||
requestContext = new RequestContext(session.getId(), rawPacket.requestId());
|
processRawPacket(rawPacket);
|
||||||
|
|
||||||
// Step 2: Syntax validation and conversion into transport object
|
|
||||||
rawRequest = ProtocolParser.parse(rawPacket.payload());
|
|
||||||
logger.debug("Parsed request to {}", rawRequest);
|
|
||||||
|
|
||||||
PrimitiveRequest primitiveRequest =
|
|
||||||
new PrimitiveRequest(
|
|
||||||
requestContext, rawRequest.command(), rawRequest.parameters());
|
|
||||||
logger.debug("Converted to {}", primitiveRequest);
|
|
||||||
|
|
||||||
// Step 3: Parse into Request and execute Request
|
|
||||||
Request request = dispatcher.parse(primitiveRequest);
|
|
||||||
router.execute(request);
|
|
||||||
} 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()));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
} catch (SocketException e) {
|
||||||
|
// Connection reset or other socket-level error — treat as client disconnect
|
||||||
|
logger.info("Client socket error / connection reset: {}", e.getMessage());
|
||||||
|
eventBus.publish(new DisconnectEvent(session.getId()));
|
||||||
|
break;
|
||||||
|
|
||||||
} catch (TokenizerException | ProtocolParserException e) {
|
} catch (TokenizerException | ProtocolParserException e) {
|
||||||
logger.error("Error occured while parsing request. RawPacket: {}", rawPacket, e);
|
logger.error("Error occured while parsing request. RawPacket: {}", rawPacket, e);
|
||||||
|
|
||||||
@@ -117,6 +110,26 @@ public class SessionReader implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processRawPacket(RawPacket rawPacket)
|
||||||
|
throws TokenizerException,
|
||||||
|
ProtocolParserException,
|
||||||
|
UnknownCommandException,
|
||||||
|
ResponseDispatchException,
|
||||||
|
MissingParameterException,
|
||||||
|
IOException {
|
||||||
|
RawRequest rawRequest = ProtocolParser.parse(rawPacket.payload());
|
||||||
|
logger.debug("Parsed request to {}", rawRequest);
|
||||||
|
|
||||||
|
RequestContext requestContext = new RequestContext(session.getId(), rawPacket.requestId());
|
||||||
|
|
||||||
|
PrimitiveRequest primitiveRequest =
|
||||||
|
new PrimitiveRequest(requestContext, rawRequest.command(), rawRequest.parameters());
|
||||||
|
logger.debug("Converted to {}", primitiveRequest);
|
||||||
|
|
||||||
|
Request request = dispatcher.parse(primitiveRequest);
|
||||||
|
router.execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helperfunction to send ErrorResponse to client
|
* Helperfunction to send ErrorResponse to client
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user