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 12d38a0..f4199bf 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 @@ -8,7 +8,7 @@ public class Client { private Socket socket; private BufferedReader in; - private BufferedWriter out; + private BufferedWriter out; public String userName; public Client(Socket socket, String userName) { @@ -25,14 +25,10 @@ public class Client { public void sendMessage() { try { - out.write(userName); - out.newLine(); - out.flush(); - Scanner sc = new Scanner(System.in); while (socket.isConnected()) { String msg = sc.nextLine(); - out.write(userName + ": " + msg); + out.write(userName + "says: " + msg); out.newLine(); out.flush(); } 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 new file mode 100644 index 0000000..e95f9f0 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Client/NTtBProtocolParser.java @@ -0,0 +1,44 @@ +package ch.unibas.dmi.dbis.cs108.Multiplayer.Client; + +import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.NTtBCommands; +import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.NTtBFormatMsg; +import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.NTtBParameter; +import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.ProtocolParser; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Scanner; + +public class NTtBProtocolParser implements ProtocolParser { + //TODO Possibly bad name, rename to clientMsgParser? + public static HashMap inputMapper; + + public NTtBProtocolParser(){ + this.inputMapper = new HashMap<>(); + this.inputMapper.put("chat",NTtBCommands.CHATG); + //TODO by far not done! + } + @Override + public NTtBFormatMsg parseMsg(String msg) { + Scanner sc = new Scanner(msg); + ArrayList input = new ArrayList<>(); + while(sc.hasNext()){ + input.add(sc.next()); + } + buildProtocolMsg(input); + return null; + //TODO needs to be finnished + } + + private String buildProtocolMsg(ArrayList input) { + //TODO + String cmd = parseCmd(input.get(0)); + input.remove(0); + return ""; + } + + private String parseCmd(String s){ + //TODO + return ""; + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBCommands.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBCommands.java new file mode 100644 index 0000000..8edf033 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBCommands.java @@ -0,0 +1,5 @@ +package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; + +public enum NTtBCommands { + CRTGM, CHATL, CHATG, CHATP, LEAVG, JOING, VOTEE, +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBInputType.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBInputType.java new file mode 100644 index 0000000..8daca24 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBInputType.java @@ -0,0 +1,9 @@ +package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; + +public interface NTtBInputType { + String msg = null; + public String getValue(); + public void setValue(); + + +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBParameter.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBParameter.java new file mode 100644 index 0000000..43b41a2 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NTtBParameter.java @@ -0,0 +1,18 @@ +package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; + +public class NTtBParameter implements NTtBInputType { + String parameterValue; + + public NTtBParameter(String parameterValue) { + this.parameterValue = parameterValue; + } + @Override + public String getValue() { + return parameterValue; + } + + @Override + public void setValue() { + //Possibly do not need + } +} 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 new file mode 100644 index 0000000..4800234 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/NightTrainProtocol.java @@ -0,0 +1,9 @@ +package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; +/* +The NightTrainProtocol implements the Communication-Protocol of the +"Night Train to Budapest"" game. It acts as an Interface between Client and server. All Client Messages are +piped through this protocol, in order for the Server to execute the correct action. It is used by the ClientHandler +for this purpose. + */ +public class NightTrainProtocol { +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/Protocol.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/Protocol.java deleted file mode 100644 index 7af94d3..0000000 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/Protocol.java +++ /dev/null @@ -1,3 +0,0 @@ -package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; - -public enum Protocol { } 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 new file mode 100644 index 0000000..bab9b4d --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolMessage.java @@ -0,0 +1,6 @@ +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/ProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolParser.java new file mode 100644 index 0000000..5249d9e --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Protocol/ProtocolParser.java @@ -0,0 +1,8 @@ +package ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol; + +import ch.unibas.dmi.dbis.cs108.Multiplayer.Protocol.NTtBFormatMsg; + +public interface ProtocolParser { + + public NTtBFormatMsg parseMsg(String msg); +} 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 9064fd6..e3f8bc1 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 @@ -5,13 +5,15 @@ import java.net.Socket; import java.util.HashSet; import java.util.Scanner; -public class ClientHandler implements Runnable{ +public class ClientHandler implements Runnable { private String clientUserName; private BufferedWriter out; private BufferedReader in; private Socket socket; Scanner sc; public static HashSet clientHandlers = new HashSet<>(); + public static HashSet inGameClients = new HashSet<>(); + public static HashSet ghostClients = new HashSet<>(); public ClientHandler(Socket socket) { try { @@ -35,8 +37,9 @@ public class ClientHandler implements Runnable{ try { msg = in.readLine(); - if( msg.equals("QUIT")){ + if( msg.equalsIgnoreCase("QUIT")){ broadcastMessage("Client: " + clientUserName + " has left the Server"); + removeClientHandler(); } broadcastMessage(msg); } catch (IOException e) { @@ -91,4 +94,8 @@ public class ClientHandler implements Runnable{ e.printStackTrace(); } } + + public void decodeMsg(String msg){ + + } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/Server.java b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/Server.java index 747f056..6301e9b 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/Server.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/Multiplayer/Server/Server.java @@ -3,11 +3,13 @@ package ch.unibas.dmi.dbis.cs108.Multiplayer.Server; import java.io.*; import java.net.ServerSocket; import java.net.Socket; +import java.util.HashSet; import java.util.Scanner; public class Server { private static final int gamePort = 42069; + private HashSet connectedClients = new HashSet<>(); private ServerSocket serverSocket; Scanner sc = new Scanner(System.in); @@ -19,12 +21,10 @@ public class Server { try { System.out.println("Port 42069 open on "); while (!serverSocket.isClosed()) { - if(sc.next().equalsIgnoreCase("quit")) { - this.closeServerSocket(); - } Socket socket = serverSocket.accept(); ClientHandler nextClient = new ClientHandler(socket); Thread th = new Thread(nextClient); + connectedClients.add(nextClient); th.start(); }