diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java index e2cab2b..0b3c318 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java @@ -1,5 +1,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client; +import ch.unibas.dmi.dbis.cs108.multiplayer.protocol.NoLegalProtocolCommandStringFoundException; + import java.net.Socket; import java.io.*; import java.net.UnknownHostException; @@ -35,10 +37,21 @@ public class Client { Scanner sc = new Scanner(System.in); while (socket.isConnected()) { String msg = sc.nextLine(); - String encodedMsg = encodeMessage(msg); - out.write(encodedMsg); - out.newLine(); - out.flush(); + String encodedMsg = ""; + try { + encodedMsg = encodeMessage(msg); + } catch (NoLegalProtocolCommandStringFoundException e) { + System.out.println("ERROR: no legal command found"); + encodedMsg = ""; + } catch (EmptyClientInputException e) { + //Maybe this exception shouldn't do anything. + } finally { + out.write(encodedMsg); + out.newLine(); + out.flush(); + } + + } } catch (IOException e) { e.printStackTrace(); @@ -53,7 +66,7 @@ public class Client { * @param msg the msg to be encoded. * @return Message encoded adhering to the NTtB Protocoll. */ - private String encodeMessage(String msg) { + private String encodeMessage(String msg) throws NoLegalProtocolCommandStringFoundException, EmptyClientInputException { NTtBProtocolParser pp = new NTtBProtocolParser(this); return pp.parseMsg(msg); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/InputToProtocolMap.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/InputToProtocolMap.java index f5dbfee..6c70052 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/InputToProtocolMap.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/InputToProtocolMap.java @@ -1,6 +1,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client; import ch.unibas.dmi.dbis.cs108.multiplayer.protocol.NightTrainProtocol; +import ch.unibas.dmi.dbis.cs108.multiplayer.protocol.NoLegalProtocolCommandStringFoundException; import java.util.HashMap; import java.util.HashSet; @@ -23,9 +24,11 @@ public class InputToProtocolMap { encoding = new HashMap<>(builder); } - public static String encode(String toEncode) { + public static String encode(String toEncode) throws NoLegalProtocolCommandStringFoundException { if (legalClientInput.contains(toEncode)) { return encoding.get(toEncode).toString(); + } else { + throw new NoLegalProtocolCommandStringFoundException(); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/NTtBProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/NTtBProtocolParser.java index 890c777..f460e02 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/NTtBProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/NTtBProtocolParser.java @@ -1,5 +1,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client; +import ch.unibas.dmi.dbis.cs108.multiplayer.protocol.NoLegalProtocolCommandStringFoundException; + import java.util.ArrayList; import java.util.Scanner; @@ -18,34 +20,26 @@ public class NTtBProtocolParser implements ProtocolParser { this.caller = caller; } @Override - public String parseMsg(String msg) { + public String parseMsg(String msg) throws NoLegalProtocolCommandStringFoundException, EmptyClientInputException{ Scanner sc = new Scanner(msg); - String parsedMsg; - ArrayList input = new ArrayList<>(); + String parsedMsg = buildProtocolMsg(input); while(sc.hasNext()){ input.add(sc.next()); } - try { - parsedMsg = buildProtocolMsg(input); - } catch (EmptyClientInputException e) { - return e.getExceptionMsg(); - //TODO Where do we log this? - } - return parsedMsg; } - private String buildProtocolMsg(ArrayList input) throws EmptyClientInputException{ + private String buildProtocolMsg(ArrayList input) throws EmptyClientInputException, NoLegalProtocolCommandStringFoundException { //TODO if(emptyClientInput(input)){ throw new EmptyClientInputException(caller); } StringBuilder s = new StringBuilder(); //friendly little helper - s.append(legalCommands.get(input.get(0))); + s.append(legalCommands.encode(input.get(0))); if (containsParameters(input)) { int size = input.size(); for(int i = 1; i < size; i++) { 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 09c1197..6852247 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 @@ -7,5 +7,5 @@ public interface ProtocolParser { * @param msg the message to be parsed * @return a String message formatted for the specific protocol */ - String parseMsg(String msg); + String parseMsg(String msg) throws Exception; }