From 3dbffa4ffb7c5d23ebcc9a272de74c4f8f5339dc Mon Sep 17 00:00:00 2001 From: MickWerf Date: Sat, 6 Jun 2020 15:44:53 +0200 Subject: [PATCH] Finished server side registration. --- core/src/netwerkprog/game/server/Server.java | 4 ++ .../server/controllers/SessionController.java | 64 +++++++++++++------ .../game/util/data/ConnectionData.java | 21 ++++++ 3 files changed, 70 insertions(+), 19 deletions(-) create mode 100644 core/src/netwerkprog/game/util/data/ConnectionData.java diff --git a/core/src/netwerkprog/game/server/Server.java b/core/src/netwerkprog/game/server/Server.java index 61ea202..3326979 100644 --- a/core/src/netwerkprog/game/server/Server.java +++ b/core/src/netwerkprog/game/server/Server.java @@ -35,4 +35,8 @@ public class Server { // gameThreads.get(game).start(); // } } + + public DataController getDataController() { + return dataController; + } } diff --git a/core/src/netwerkprog/game/server/controllers/SessionController.java b/core/src/netwerkprog/game/server/controllers/SessionController.java index 2b64825..f81ac5c 100644 --- a/core/src/netwerkprog/game/server/controllers/SessionController.java +++ b/core/src/netwerkprog/game/server/controllers/SessionController.java @@ -3,9 +3,12 @@ package netwerkprog.game.server.controllers; import netwerkprog.game.server.Server; import netwerkprog.game.server.ServerClient; import netwerkprog.game.util.application.Controller; +import netwerkprog.game.util.data.ConnectionData; import netwerkprog.game.util.data.Data; import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; @@ -57,25 +60,48 @@ public class SessionController extends Controller { * @param socket The socket used for the client connections. */ public void registerClient(Socket socket) { -// try { -// System.out.println("[SERVER] got new client on " + socket.getInetAddress().getHostAddress()); -// ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream()); -// DataInputStream inputStream = new DataInputStream(socket.getInputStream()); -// -// outputStream.writeUTF("Enter username: "); -// String username = inputStream.readUTF(); -// -// System.out.println("[SERVER] got username " + username); -// ServerClient serverClient = new ServerClient(username, socket, this); -// -// Thread t = new Thread(serverClient); -// t.start(); -// -// this.clientThreads.put(username,t); -// this.clients.add(serverClient); -// } catch (IOException ex) { -// ex.printStackTrace(); -// } + try { + System.out.println("[SERVER] got new client on " + socket.getInetAddress().getHostAddress()); + ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream()); + ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream()); + + String username; + + outputStream.writeObject(new ConnectionData("Connect", "Please give a username")); + Object object = inputStream.readObject(); + if (object instanceof Data) { + Data data = (Data) object; + if (data instanceof ConnectionData) { + ConnectionData connectionData = (ConnectionData) data.getPayload(); + if (connectionData.getAction().equals("Connect")) { + username = connectionData.getMessage(); + } else { + //todo error messaging. + registerClient(socket); + return; + } + } else { + //todo error messaging. + registerClient(socket); + return; + } + } else { + //todo error messaging. + registerClient(socket); + return; + } + + System.out.println("[SERVER] got username " + username); + ServerClient serverClient = new ServerClient(username, socket, this, server.getDataController()); + + Thread t = new Thread(serverClient); + t.start(); + + this.clientThreads.put(username,t); + this.clients.add(serverClient); + } catch (IOException | ClassNotFoundException ex) { + ex.printStackTrace(); + } } /** diff --git a/core/src/netwerkprog/game/util/data/ConnectionData.java b/core/src/netwerkprog/game/util/data/ConnectionData.java new file mode 100644 index 0000000..9d3aefe --- /dev/null +++ b/core/src/netwerkprog/game/util/data/ConnectionData.java @@ -0,0 +1,21 @@ +package netwerkprog.game.util.data; + +public class ConnectionData extends Data { + private final String action; + private final String message; + + public ConnectionData(String action, String username) { + super("Connection"); + super.setPayload(this); + this.action = action; + this.message = username; + } + + public String getAction() { + return action; + } + + public String getMessage() { + return message; + } +}