From 3575c2010cb1a597ca5f257afcbd18ce36014bbb Mon Sep 17 00:00:00 2001 From: Sebastian Lenzlinger Date: Fri, 25 Mar 2022 14:44:47 +0100 Subject: [PATCH] deleted unused classes work on: NTtBFormatMsg ClientMsgDecoder Notice: no correct response is generated yet! --- .../Multiplayer/Client/ProtocolParser.java | 3 -- .../Multiplayer/Protocol/NTtBFormatMsg.java | 42 +++++++++++++--- .../Protocol/NTtB_Protocol_Definition.txt | 1 + .../Protocol/NightTrainProtocol.java | 50 +++++++++++++++++-- ...alProtocolCommandStringFoundException.java | 4 ++ .../Multiplayer/Protocol/ProtocolDecoder.java | 2 +- .../Multiplayer/Protocol/ProtocolMessage.java | 6 --- .../Multiplayer/Protocol/methods/Chat.java | 4 -- .../Multiplayer/Protocol/methods/NewGame.java | 4 -- .../Multiplayer/Protocol/methods/QUITS.java | 4 -- .../Multiplayer/Protocol/methods/VOTEG.java | 4 -- .../Multiplayer/Server/ClientHandler.java | 2 +- .../Multiplayer/Server/ClientMsgDecoder.java | 46 ++++++++++++++--- .../Multiplayer/Server/InSessionLogik.java | 8 +++ .../Multiplayer/Server/sessionLogik.java | 4 -- 15 files changed, 135 insertions(+), 49 deletions(-) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NoLegalProtocolCommandStringFoundException.java delete mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolMessage.java delete mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/Chat.java delete mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/NewGame.java delete mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/QUITS.java delete mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/VOTEG.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/InSessionLogik.java delete mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/sessionLogik.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Client/ProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Client/ProtocolParser.java index c738c87..6dbcebd 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Client/ProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Client/ProtocolParser.java @@ -1,8 +1,5 @@ package ch.unibas.dmi.dbis.cs108.Multiplayer.Client; -import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.NTtBFormatMsg; -import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.ProtocolMessage; - public interface ProtocolParser { /** * Takes a String from client input and parses into diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBFormatMsg.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBFormatMsg.java index f07b4ff..a5c45c3 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBFormatMsg.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBFormatMsg.java @@ -1,13 +1,43 @@ package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; -public abstract class NTtBFormatMsg extends ProtocolMessage{ +import java.util.LinkedList; +import java.util.Queue; - private String message; +public class NTtBFormatMsg { - public NTtBFormatMsg(String msg) { - this.message = msg; + private String msgToClient; + private NightTrainProtocol.NTtBCommands command; + private final Queue parameters; //TODO maybe use array? + + public NTtBFormatMsg(String msgToClient, NightTrainProtocol.NTtBCommands command, Queue parameters) { + this.msgToClient = msgToClient; + this.command = command; + this.parameters = parameters; } - public boolean isCorrectlyFormatted(String msg){ return false;} - public String getMessage(){return this.message;} + public NTtBFormatMsg() { + this.msgToClient = ""; + this.command = null; + this.parameters = new LinkedList<>(); + } + + public String getMessage() { + return msgToClient; + } + + public NightTrainProtocol.NTtBCommands getCommand() { + return command; + } + + public Queue getParameters() { + return parameters; + } + + public void setMsgToClient(String msgToClient) { + this.msgToClient = msgToClient; + } + + public void setCommand(NightTrainProtocol.NTtBCommands command) { + this.command = command; + } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtB_Protocol_Definition.txt b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtB_Protocol_Definition.txt index 7505490..95d2a20 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtB_Protocol_Definition.txt +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtB_Protocol_Definition.txt @@ -14,4 +14,5 @@ /** Server Commands: * MSGRS: "Message recieved": Paramaters: a string detailing to the client that and what the server recieved as command. + * SEROR: Server had an error. (used for debugging) */ \ No newline at end of file diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NightTrainProtocol.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NightTrainProtocol.java index b721b85..da7ad1d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NightTrainProtocol.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NightTrainProtocol.java @@ -11,16 +11,56 @@ for this purpose. */ public class NightTrainProtocol { - public static HashMap stringNTtBCommandsHashMap = new HashMap<>(); - public static ProtocolValidator protocolValidator; - public static HashSet legalStrings; + //TODO: initialite the fields + + private static HashMap stringNTtBCommandsHashMap = initializeMapping(); + private static ProtocolValidator protocolValidator; + private static HashSet legalStrings = new HashSet<>(stringNTtBCommandsHashMap.keySet()); + public enum NTtBCommands { //Client Commands CRTGM, CHATA, CHATW, CHATG, LEAVG, JOING, VOTEG, QUITS, LISTP, CUSRN, //Server Responses - MSGRS; + MSGRS, SEROR; + } - //Allowes to associate strings with the enum objects. the enum fields are easier for switch statements. + private static HashMap initializeMapping(){ + HashMap map = new HashMap<>(); + for(NTtBCommands cmd: NTtBCommands.values()) { + map.put(cmd.toString(), cmd); + } + return map; + } + + //getters & setters + + public static HashMap getStringNTtBCommandsHashMap() { + return stringNTtBCommandsHashMap; + } + + public static HashSet getLegalStrings() { + return legalStrings; + } + + //Utility Methods: + /** + * Validates a given string is a valid representation + * of a protocol command + * @param cmd, the string command to be validated + * @return true if cmd is a valid command + */ + public boolean isLegalCmdString(String cmd) { + return legalStrings.contains(cmd); + } + + public NTtBCommands getCmdEnumObject(String cmd) throws NoLegalProtocolCommandStringFoundException { + if(isLegalCmdString(cmd)){ + return stringNTtBCommandsHashMap.get(cmd); + } else { + throw new NoLegalProtocolCommandStringFoundException(); + } } + + //TODO analyize what methods are needed } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NoLegalProtocolCommandStringFoundException.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NoLegalProtocolCommandStringFoundException.java new file mode 100644 index 0000000..cd6d980 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NoLegalProtocolCommandStringFoundException.java @@ -0,0 +1,4 @@ +package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; + +public class NoLegalProtocolCommandStringFoundException extends Exception { +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolDecoder.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolDecoder.java index a5bf038..a54e21d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolDecoder.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolDecoder.java @@ -2,5 +2,5 @@ package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; public interface ProtocolDecoder { - public String decodeMsg(String msg); + public NTtBFormatMsg decodeMsg(String msg); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolMessage.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolMessage.java deleted file mode 100644 index bab9b4d..0000000 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolMessage.java +++ /dev/null @@ -1,6 +0,0 @@ -package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; - -public class ProtocolMessage { - //TODO ProtocolMessage Implementation - //TODO definition of abilities and properties of class -} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/Chat.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/Chat.java deleted file mode 100644 index 33de4d4..0000000 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/Chat.java +++ /dev/null @@ -1,4 +0,0 @@ -package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.methods; - -public class Chat { -} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/NewGame.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/NewGame.java deleted file mode 100644 index 3ef9f44..0000000 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/NewGame.java +++ /dev/null @@ -1,4 +0,0 @@ -package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.methods; - -public class NewGame { -} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/QUITS.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/QUITS.java deleted file mode 100644 index ec2e2d8..0000000 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/QUITS.java +++ /dev/null @@ -1,4 +0,0 @@ -package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.methods; - -public class QUITS { -} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/VOTEG.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/VOTEG.java deleted file mode 100644 index 154223f..0000000 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/methods/VOTEG.java +++ /dev/null @@ -1,4 +0,0 @@ -package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.methods; - -public class VOTEG { -} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/ClientHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/ClientHandler.java index 4380292..dd86d8f 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/ClientHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/ClientHandler.java @@ -46,7 +46,7 @@ public class ClientHandler implements Runnable { try { msg = in.readLine(); - response = clientMsgDecoder.decodeMsg(msg); //The response of the server to the clients message + response = clientMsgDecoder.decodeMsg(msg).getMessage(); //The response of the server to the clients message out.write(response); out.newLine(); out.flush(); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/ClientMsgDecoder.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/ClientMsgDecoder.java index 1e98201..3a8ad5b 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/ClientMsgDecoder.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/ClientMsgDecoder.java @@ -1,24 +1,35 @@ package ch.unibas.dmi.dbis.cs108.Multiplayer.Server; +import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.NTtBFormatMsg; import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.NightTrainProtocol; +import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.NoLegalProtocolCommandStringFoundException; import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.ProtocolDecoder; +import java.util.LinkedList; import java.util.List; +import java.util.Queue; public class ClientMsgDecoder implements ProtocolDecoder { - private NightTrainProtocol.NTtBCommands protocol; + private NightTrainProtocol protocol; @Override - public String decodeMsg(String msg) { + //TODO this method IS NOT FINNISHED. @return is not correct as of now! + public NTtBFormatMsg decodeMsg(String msg) { List msgTokens = tokenizeMsg(msg); //List where we'll put the string tokens seperated by $. String cmd; //The command token + NightTrainProtocol.NTtBCommands cmdObject; + Queue parameters; + NTtBFormatMsg util = new NTtBFormatMsg(); + cmd = serverResponseBuilder(msgTokens); + cmdObject = getCommandConstant(cmd); + util.setCommand(cmdObject); try{ - cmd = getCommand(msgTokens); + cmd = getCommandStringToken(msgTokens); } catch (NoCommandTokenException e) { //TODO: decide what to do here. How can we catch this smartly and where do we send it? System.out.println(("ClientMsgDecoder cannot find a command token")); e.printStackTrace(System.out); - return"ERROR$command token not found"; //TODO This is a very unelegant solution. + return new NTtBFormatMsg("ERROR$NoCommandTokenException caught!", null, null); } return null; @@ -29,12 +40,33 @@ public class ClientMsgDecoder implements ProtocolDecoder { * to client */ private String serverResponseBuilder(List msgTokens){ + StringBuilder sb = new StringBuilder(); + //assumes not empty list! + NightTrainProtocol.NTtBCommands cmd = getCommandConstant(msgTokens.get(0)); + sb.append("Server msg: "); + sb.append("Command *" + cmd.toString() + "* recieved"); + return null; } - private String getCommand(List msgTokens) throws NoCommandTokenException { + //Uses the NightTrainProtocol classes utility method + private boolean isLegalCmdString(String cmd) { + return protocol.isLegalCmdString(cmd); + } + private String getCommandStringToken(List msgTokens) throws NoCommandTokenException { return msgTokens.get(0); } + private NightTrainProtocol.NTtBCommands getCommandConstant(String stringToken) { + try{ + return protocol.getCmdEnumObject(stringToken); + }catch (NoLegalProtocolCommandStringFoundException e) { + e.printStackTrace(); + e.getMessage(); + } finally { + return NightTrainProtocol.NTtBCommands.SEROR; + } + + } //Creates tokens from the clientMsg and puts them in a list private List tokenizeMsg(String msg) { @@ -45,7 +77,7 @@ public class ClientMsgDecoder implements ProtocolDecoder { * This method should implement the initiation * of server agency according to client msg */ - private @interface serverActionBuilder { - //TODO implement what should happen server side(vote/chat/quit etc) + private Queue serverActionBuilder() { + return new LinkedList(); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/InSessionLogik.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/InSessionLogik.java new file mode 100644 index 0000000..7b44fb2 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/InSessionLogik.java @@ -0,0 +1,8 @@ +package ch.unibas.dmi.dbis.cs108.Multiplayer.Server; + +public class InSessionLogik { + Server server; + public InSessionLogik(Server server) { + this.server = server; + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/sessionLogik.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/sessionLogik.java deleted file mode 100644 index 73696eb..0000000 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/sessionLogik.java +++ /dev/null @@ -1,4 +0,0 @@ -package ch.unibas.dmi.dbis.cs108.Multiplayer.Server; - -public class sessionLogik { -}