Merge branch 'feat/request-context-record' into 'main'
Add RequestContext to simplify creation of Request which requires SessionId and RequestId Closes #12 See merge request cs108-fs26/Gruppe-13!45
This commit was merged in pull request #201.
This commit is contained in:
+2
-1
@@ -3,4 +3,5 @@ package ch.unibas.dmi.dbis.cs108.casono.server.network.parser;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/** Created by the ProtocolParser to allow easy access to the request contents */
|
/** Created by the ProtocolParser to allow easy access to the request contents */
|
||||||
public record PrimitiveRequest(int requestId, String command, List<Parameter> parameters) {}
|
public record PrimitiveRequest(
|
||||||
|
RequestContext context, String command, List<Parameter> parameters) {}
|
||||||
|
|||||||
+3
-4
@@ -1,6 +1,5 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.casono.server.network.parser;
|
package ch.unibas.dmi.dbis.cs108.casono.server.network.parser;
|
||||||
|
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.transport.RawPacket;
|
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.RawToken;
|
import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.RawToken;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.Token;
|
import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.Token;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.TokenClassifier;
|
import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.TokenClassifier;
|
||||||
@@ -19,15 +18,15 @@ public class ProtocolParser {
|
|||||||
* @param packet the RawPacket containing the recieved data
|
* @param packet the RawPacket containing the recieved data
|
||||||
* @return created PrimitiveRequest
|
* @return created PrimitiveRequest
|
||||||
*/
|
*/
|
||||||
public static PrimitiveRequest parse(RawPacket packet) {
|
public static RawRequest parse(String payload) {
|
||||||
List<RawToken> rawTokens = Tokenizer.tokenize(packet.payload());
|
List<RawToken> rawTokens = Tokenizer.tokenize(payload);
|
||||||
List<Token> tokens = TokenClassifier.classify(rawTokens);
|
List<Token> tokens = TokenClassifier.classify(rawTokens);
|
||||||
|
|
||||||
Iterator<Token> iterator = tokens.iterator();
|
Iterator<Token> iterator = tokens.iterator();
|
||||||
String command = readCommand(iterator);
|
String command = readCommand(iterator);
|
||||||
List<Parameter> parameters = readParameters(iterator);
|
List<Parameter> parameters = readParameters(iterator);
|
||||||
|
|
||||||
return new PrimitiveRequest(packet.requestId(), command, parameters);
|
return new RawRequest(command, parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.casono.server.network.parser;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public record RawRequest(String command, List<Parameter> parameters) {}
|
||||||
@@ -1,4 +1,24 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.casono.server.network.parser;
|
package ch.unibas.dmi.dbis.cs108.casono.server.network.parser;
|
||||||
|
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId;
|
||||||
|
|
||||||
/** Request, produced by the CommandParser */
|
/** Request, produced by the CommandParser */
|
||||||
public interface Request {}
|
public abstract class Request {
|
||||||
|
protected final RequestContext context;
|
||||||
|
|
||||||
|
public Request(RequestContext context) {
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RequestContext getContext() {
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SessionId getSessionId() {
|
||||||
|
return context.sessionId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRequestId() {
|
||||||
|
return context.requestId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.casono.server.network.parser;
|
||||||
|
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.sessions.SessionId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Immutable context for a network request.
|
||||||
|
*
|
||||||
|
* <p>Contains the originating session's identifier and the request's id. Later used to create
|
||||||
|
* response.
|
||||||
|
*
|
||||||
|
* @param sessionId the identifier of the session that initiated the request
|
||||||
|
* @param requestId the request's numeric id within the session
|
||||||
|
*/
|
||||||
|
public record RequestContext(SessionId sessionId, int requestId) {}
|
||||||
+10
-2
@@ -5,6 +5,8 @@ import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus;
|
|||||||
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.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;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.TokenizerException;
|
import ch.unibas.dmi.dbis.cs108.casono.server.tokenizer.TokenizerException;
|
||||||
@@ -36,8 +38,14 @@ public class SessionReader implements Runnable {
|
|||||||
rawPacket = transport.read();
|
rawPacket = transport.read();
|
||||||
logger.debug("Recieved: {}", rawPacket);
|
logger.debug("Recieved: {}", rawPacket);
|
||||||
|
|
||||||
PrimitiveRequest primitiveRequest = ProtocolParser.parse(rawPacket);
|
RawRequest rawRequest = ProtocolParser.parse(rawPacket.payload());
|
||||||
logger.debug("Parsed request to {}", primitiveRequest);
|
logger.debug("Parsed request to {}", rawRequest);
|
||||||
|
|
||||||
|
RequestContext requestContext =
|
||||||
|
new RequestContext(session.getId(), rawPacket.requestId());
|
||||||
|
PrimitiveRequest primitiveRequest =
|
||||||
|
new PrimitiveRequest(
|
||||||
|
requestContext, rawRequest.command(), rawRequest.parameters());
|
||||||
} 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