From 95037404f2e52463779bd257385cb2742f4eb096 Mon Sep 17 00:00:00 2001 From: MickWerf Date: Wed, 27 May 2020 22:46:24 +0200 Subject: [PATCH] Removed generic dataparser. Removed generic callback. Added Parsers for client and server. Added Parsercallback interface. Applied parser and callback to serverclient and client. --- core/src/netwerkprog/game/client/Client.java | 19 +++++---- core/src/netwerkprog/game/client/Parser.java | 15 +++++++ core/src/netwerkprog/game/server/Parser.java | 15 +++++++ .../netwerkprog/game/server/ServerClient.java | 41 ++++++++----------- .../server/controllers/DataController.java | 8 ++++ .../server/controllers/SessionController.java | 18 ++------ .../netwerkprog/game/util/data/Callback.java | 5 --- .../game/util/data/DataParser.java | 14 ------- .../game/util/data/ParserCallback.java | 5 +++ 9 files changed, 72 insertions(+), 68 deletions(-) create mode 100644 core/src/netwerkprog/game/client/Parser.java create mode 100644 core/src/netwerkprog/game/server/Parser.java create mode 100644 core/src/netwerkprog/game/server/controllers/DataController.java delete mode 100644 core/src/netwerkprog/game/util/data/Callback.java delete mode 100644 core/src/netwerkprog/game/util/data/DataParser.java create mode 100644 core/src/netwerkprog/game/util/data/ParserCallback.java diff --git a/core/src/netwerkprog/game/client/Client.java b/core/src/netwerkprog/game/client/Client.java index 1a54dec..e17ccd1 100644 --- a/core/src/netwerkprog/game/client/Client.java +++ b/core/src/netwerkprog/game/client/Client.java @@ -2,7 +2,7 @@ package netwerkprog.game.client; import netwerkprog.game.util.application.Controller; import netwerkprog.game.util.data.Data; -import netwerkprog.game.util.data.DataParser; +import netwerkprog.game.util.data.ParserCallback; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -10,10 +10,10 @@ import java.io.IOException; import java.net.Socket; import java.util.Arrays; -public class Client extends Controller { +public class Client extends Controller implements ParserCallback { private final int port; private final String hostname; - private final DataParser parser; + private final Parser parser; private boolean isConnected = true; private Socket socket; private Thread receiveThread; @@ -22,7 +22,7 @@ public class Client extends Controller { public Client(String hostname) { this.port = Data.port(); this.hostname = hostname; - this.parser = new DataParser(); + this.parser = new Parser(this); } /** @@ -71,16 +71,12 @@ public class Client extends Controller { * @param in The inputStream */ public void receive(DataInputStream in) { - Data data = null; while (isConnected) { try { - data = this.parser.parse(in.readUTF()); + this.parser.parse(in.readUTF()); } catch (IOException e) { e.printStackTrace(); } - if (data != null) { - send(this.parser.parse(data)); - } } } @@ -100,4 +96,9 @@ public class Client extends Controller { e.printStackTrace(); } } + + @Override + public void onDataReceived(String data) { + send(data); + } } diff --git a/core/src/netwerkprog/game/client/Parser.java b/core/src/netwerkprog/game/client/Parser.java new file mode 100644 index 0000000..79849cb --- /dev/null +++ b/core/src/netwerkprog/game/client/Parser.java @@ -0,0 +1,15 @@ +package netwerkprog.game.client; + +import netwerkprog.game.util.data.ParserCallback; + +public class Parser { + private final ParserCallback callback; + + public Parser(ParserCallback callback) { + this.callback = callback; + } + + public void parse(String data) { + callback.onDataReceived(data); + } +} diff --git a/core/src/netwerkprog/game/server/Parser.java b/core/src/netwerkprog/game/server/Parser.java new file mode 100644 index 0000000..2da6f75 --- /dev/null +++ b/core/src/netwerkprog/game/server/Parser.java @@ -0,0 +1,15 @@ +package netwerkprog.game.server; + +import netwerkprog.game.util.data.ParserCallback; + +public class Parser { + private final ParserCallback callback; + + public Parser(ParserCallback callback) { + this.callback = callback; + } + + public void parse(String request) { + callback.onDataReceived(null); + } +} diff --git a/core/src/netwerkprog/game/server/ServerClient.java b/core/src/netwerkprog/game/server/ServerClient.java index 311d18b..f937bf4 100644 --- a/core/src/netwerkprog/game/server/ServerClient.java +++ b/core/src/netwerkprog/game/server/ServerClient.java @@ -1,25 +1,25 @@ package netwerkprog.game.server; import netwerkprog.game.server.controllers.SessionController; -import netwerkprog.game.util.data.Data; +import netwerkprog.game.util.data.ParserCallback; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; -public class ServerClient implements Runnable { +public class ServerClient implements Runnable, ParserCallback { private DataInputStream in; private DataOutputStream out; - private Socket socket; - private String name; - private SessionController server; - private boolean isConnected = false; + private final String name; + private final SessionController server; + private final Parser parser; + private boolean isConnected; public ServerClient(String name, Socket socket, SessionController server) { this.name = name; this.server = server; - this.socket = socket; + this.parser = new Parser(this); try { this.in = new DataInputStream(socket.getInputStream()); this.out = new DataOutputStream(socket.getOutputStream()); @@ -30,14 +30,6 @@ public class ServerClient implements Runnable { } } - public void readUTF() { - try { - System.out.println("[SERVERCLIENT] got message: " + in.readUTF()); - } catch (IOException e) { - e.printStackTrace(); - } - } - public void writeUTF(String text) { try { this.out.writeUTF(text); @@ -48,27 +40,26 @@ public class ServerClient implements Runnable { @Override public void run() { - while (isConnected) { + while (this.isConnected) { try { String received = this.in.readUTF(); - Data data = server.parseData(received); - if (data.toString().equals("\\quit")) { - this.isConnected = false; - this.server.removeClient(this); - } else { - this.out.writeUTF(data.toString()); - } + this.parser.parse(received); } catch (IOException e) { System.out.println("[SERVERCLIENT] caught exception - " + e.getMessage()); System.out.println("[SERVERCLIENT] terminating failing connection..."); - isConnected = false; + this.isConnected = false; System.out.println("[SERVERCLIENT] done!"); } } } public String getName() { - return name; + return this.name; + } + + @Override + public void onDataReceived(String data) { + writeUTF(data); } } diff --git a/core/src/netwerkprog/game/server/controllers/DataController.java b/core/src/netwerkprog/game/server/controllers/DataController.java new file mode 100644 index 0000000..79e8a02 --- /dev/null +++ b/core/src/netwerkprog/game/server/controllers/DataController.java @@ -0,0 +1,8 @@ +package netwerkprog.game.server.controllers; + +public class DataController { + public DataController() { + } + + +} diff --git a/core/src/netwerkprog/game/server/controllers/SessionController.java b/core/src/netwerkprog/game/server/controllers/SessionController.java index 23f35f1..94a7c0b 100644 --- a/core/src/netwerkprog/game/server/controllers/SessionController.java +++ b/core/src/netwerkprog/game/server/controllers/SessionController.java @@ -1,13 +1,12 @@ package netwerkprog.game.server.controllers; import netwerkprog.game.server.ServerClient; -import netwerkprog.game.util.data.Data; -import netwerkprog.game.util.data.DataParser; import netwerkprog.game.util.application.Controller; +import netwerkprog.game.util.data.Data; import java.io.DataInputStream; -import java.io.DataOutputStream; import java.io.IOException; +import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; @@ -19,13 +18,11 @@ import java.util.Set; */ public class SessionController extends Controller { private ServerSocket serverSocket; - private final DataParser parser; private final ArrayList clients = new ArrayList<>(); private final HashMap clientThreads = new HashMap<>(); private boolean listening; public SessionController() { - this.parser = new DataParser(); this.listening = true; } @@ -61,7 +58,7 @@ public class SessionController extends Controller { public void registerClient(Socket socket) { try { System.out.println("[SERVER] got new client on " + socket.getInetAddress().getHostAddress()); - DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream()); + ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream()); DataInputStream inputStream = new DataInputStream(socket.getInputStream()); outputStream.writeUTF("Enter username: "); @@ -80,15 +77,6 @@ public class SessionController extends Controller { } } - /** - * Parses the request to the requested Data. - * @param request The request to parse. - * @return Parsed Data. - */ - public Data parseData(String request) { - return this.parser.parse(request); - } - /** * Sends a server message to all connected clients. * @param text message. diff --git a/core/src/netwerkprog/game/util/data/Callback.java b/core/src/netwerkprog/game/util/data/Callback.java deleted file mode 100644 index a0b2561..0000000 --- a/core/src/netwerkprog/game/util/data/Callback.java +++ /dev/null @@ -1,5 +0,0 @@ -package netwerkprog.game.util.data; - -public interface Callback { - void onDataReceived(); -} diff --git a/core/src/netwerkprog/game/util/data/DataParser.java b/core/src/netwerkprog/game/util/data/DataParser.java deleted file mode 100644 index 487fad2..0000000 --- a/core/src/netwerkprog/game/util/data/DataParser.java +++ /dev/null @@ -1,14 +0,0 @@ -package netwerkprog.game.util.data; - -public class DataParser { - public DataParser() { - } - - public Data parse(String request) { - return null; - } - - public String parse(Data data) { - return null; - } -} diff --git a/core/src/netwerkprog/game/util/data/ParserCallback.java b/core/src/netwerkprog/game/util/data/ParserCallback.java new file mode 100644 index 0000000..3ce8c27 --- /dev/null +++ b/core/src/netwerkprog/game/util/data/ParserCallback.java @@ -0,0 +1,5 @@ +package netwerkprog.game.util.data; + +public interface ParserCallback { + void onDataReceived(String data); +}