From 1c7b47dc57bfdd641613e56ba72f210c67fa7aa2 Mon Sep 17 00:00:00 2001 From: MickWerf Date: Mon, 11 May 2020 17:04:33 +0200 Subject: [PATCH] Moved connection code from server to sessioncontroller Added implements runnable to controller super class. Added Thread management to server. Added testcode to GameController Added InputController to client Added Objective to Game package Added Timer to game package Removed ScoreController --- .../client/controllers/GrapicsController.java | 8 ++ .../client/controllers/InputController.java | 14 +++ .../client/controllers/SessionController.java | 8 ++ core/src/netwerkprog/game/server/Server.java | 89 ++++------------- .../netwerkprog/game/server/ServerClient.java | 6 +- .../server/controllers/SessionController.java | 98 +++++++++++++++++++ .../controllers/game/CharacterController.java | 8 ++ .../controllers/game/GameController.java | 27 ++++- .../controllers/game/ObjectController.java | 8 ++ .../server/controllers/game/Objective.java | 4 + .../controllers/game/ScoreController.java | 6 -- .../game/server/controllers/game/Timer.java | 6 ++ .../src/netwerkprog/game/util/Controller.java | 2 +- 13 files changed, 201 insertions(+), 83 deletions(-) create mode 100644 core/src/netwerkprog/game/client/controllers/InputController.java create mode 100644 core/src/netwerkprog/game/server/controllers/game/Objective.java delete mode 100644 core/src/netwerkprog/game/server/controllers/game/ScoreController.java create mode 100644 core/src/netwerkprog/game/server/controllers/game/Timer.java diff --git a/core/src/netwerkprog/game/client/controllers/GrapicsController.java b/core/src/netwerkprog/game/client/controllers/GrapicsController.java index 6f690b0..76d0e58 100644 --- a/core/src/netwerkprog/game/client/controllers/GrapicsController.java +++ b/core/src/netwerkprog/game/client/controllers/GrapicsController.java @@ -3,4 +3,12 @@ package netwerkprog.game.client.controllers; import netwerkprog.game.util.Controller; public class GrapicsController extends Controller { + public GrapicsController() { + + } + + @Override + public void run() { + + } } diff --git a/core/src/netwerkprog/game/client/controllers/InputController.java b/core/src/netwerkprog/game/client/controllers/InputController.java new file mode 100644 index 0000000..db2d812 --- /dev/null +++ b/core/src/netwerkprog/game/client/controllers/InputController.java @@ -0,0 +1,14 @@ +package netwerkprog.game.client.controllers; + +import netwerkprog.game.util.Controller; + +public class InputController extends Controller { + public InputController() { + + } + + @Override + public void run() { + + } +} diff --git a/core/src/netwerkprog/game/client/controllers/SessionController.java b/core/src/netwerkprog/game/client/controllers/SessionController.java index 7852ae9..5e35d6d 100644 --- a/core/src/netwerkprog/game/client/controllers/SessionController.java +++ b/core/src/netwerkprog/game/client/controllers/SessionController.java @@ -3,4 +3,12 @@ package netwerkprog.game.client.controllers; import netwerkprog.game.util.Controller; public class SessionController extends Controller { + public SessionController() { + + } + + @Override + public void run() { + + } } diff --git a/core/src/netwerkprog/game/server/Server.java b/core/src/netwerkprog/game/server/Server.java index 063931b..2b157b2 100644 --- a/core/src/netwerkprog/game/server/Server.java +++ b/core/src/netwerkprog/game/server/Server.java @@ -1,95 +1,42 @@ package netwerkprog.game.server; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Net; -import com.badlogic.gdx.net.ServerSocketHints; -import com.badlogic.gdx.net.SocketHints; +import netwerkprog.game.server.controllers.SessionController; +import netwerkprog.game.server.controllers.game.GameController; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.ServerSocket; -import java.net.Socket; -import java.util.ArrayList; import java.util.HashMap; public class Server { - private ServerSocket serverSocket; + private SessionController sessionController; + private Thread sessionThread; + private HashMap gameThreads; public static final int PORT = 8000; - private ArrayList clients = new ArrayList<>(); - private HashMap clientThreads = new HashMap<>(); public static void main(String[] args) { Server server = new Server(); - server.connect(); - + server.start(); } - public void connect() { - try { - this.serverSocket = new ServerSocket(PORT); - boolean running = true; - while (running) { - System.out.println("[SERVER] listening on port " + PORT); - Socket socket = serverSocket.accept(); + private void start() { + this.sessionController = new SessionController(); - System.out.println("[SERVER] got new client on " + socket.getInetAddress().getHostAddress()); - DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream()); - DataInputStream inputStream = new DataInputStream(socket.getInputStream()); + this.gameThreads = new HashMap<>(); + this.sessionThread = new Thread(sessionController); - outputStream.writeUTF("Enter nickname: "); - String nickname = inputStream.readUTF(); - - System.out.println("[SERVER] got nickname " + nickname); - ServerClient serverClient = new ServerClient(nickname, socket,this); - - Thread t = new Thread(serverClient); - t.start(); - - clientThreads.put(nickname,t); - this.clients.add(serverClient); - - sendMessage(nickname, "--- Welcome! ---\nPeople online : " + clients.size()); - - clients.forEach(yeet -> sendToEveryoneExcept(nickname,nickname + " joined the server! [" + socket.getInetAddress().getHostAddress() + "]")); - } - - this.serverSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } + run(); } - public void sendToEveryone(String text) { - for (ServerClient serverClient : clients) { - serverClient.writeUTF(text); - } + private void run() { + setTestGames(); } - public void sendToEveryoneExcept(String name, String text) { - for (ServerClient serverClient : clients) { - if (!serverClient.getName().equals(name)) - serverClient.writeUTF(text); + private void setTestGames() { + for (int i = 0; i < 10; i++) { + gameThreads.put("game " + i, new Thread(new GameController(i))); } - } - public void sendMessage(String name, String text) { - for (ServerClient serverClient : clients) { - if (serverClient.getName().equals(name)) { - serverClient.writeUTF(text); - break; - } + for (String thread : gameThreads.keySet()) { + gameThreads.get(thread).start(); } - } - public void removeClient(ServerClient serverClient) { - this.clients.remove(serverClient); - try { - this.clientThreads.get(serverClient.getName()).join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - this.clientThreads.remove(serverClient.getName()); - this.sendToEveryone(serverClient.getName() + " left!"); } } diff --git a/core/src/netwerkprog/game/server/ServerClient.java b/core/src/netwerkprog/game/server/ServerClient.java index d4bca8e..24d101e 100644 --- a/core/src/netwerkprog/game/server/ServerClient.java +++ b/core/src/netwerkprog/game/server/ServerClient.java @@ -1,5 +1,7 @@ package netwerkprog.game.server; +import netwerkprog.game.server.controllers.SessionController; + import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; @@ -10,10 +12,10 @@ public class ServerClient implements Runnable { private DataOutputStream out; private Socket socket; private String name; - private Server server; + private SessionController server; private boolean isConnected = false; - public ServerClient(String name, Socket socket, Server server) { + public ServerClient(String name, Socket socket, SessionController server) { this.name = name; this.server = server; this.socket = socket; diff --git a/core/src/netwerkprog/game/server/controllers/SessionController.java b/core/src/netwerkprog/game/server/controllers/SessionController.java index 1cfaeff..8239891 100644 --- a/core/src/netwerkprog/game/server/controllers/SessionController.java +++ b/core/src/netwerkprog/game/server/controllers/SessionController.java @@ -1,6 +1,104 @@ package netwerkprog.game.server.controllers; +import netwerkprog.game.server.Server; +import netwerkprog.game.server.ServerClient; import netwerkprog.game.util.Controller; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.ArrayList; +import java.util.HashMap; + public class SessionController extends Controller { + private ServerSocket serverSocket; + private ArrayList clients = new ArrayList<>(); + private HashMap clientThreads = new HashMap<>(); + + public SessionController() { + + } + + public void connect() { + try { + this.serverSocket = new ServerSocket(Server.PORT); + System.out.println("[SERVER] listening on port " + Server.PORT); + Socket socket = serverSocket.accept(); + + System.out.println("[SERVER] got new client on " + socket.getInetAddress().getHostAddress()); + DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream()); + DataInputStream inputStream = new DataInputStream(socket.getInputStream()); + + outputStream.writeUTF("Enter nickname: "); + String nickname = inputStream.readUTF(); + + System.out.println("[SERVER] got nickname " + nickname); + ServerClient serverClient = new ServerClient(nickname, socket, this); + + Thread t = new Thread(serverClient); + t.start(); + + clientThreads.put(nickname, t); + this.clients.add(serverClient); + + sendMessage(nickname, "--- Welcome! ---\nPeople online : " + clients.size()); + + clients.forEach(yeet -> sendToEveryoneExcept(nickname, nickname + " joined the server! [" + socket.getInetAddress().getHostAddress() + "]")); + + + this.serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void sendToEveryone(String text) { + for (ServerClient serverClient : clients) { + serverClient.writeUTF(text); + } + } + + public void sendToEveryoneExcept(String name, String text) { + for (ServerClient serverClient : clients) { + if (!serverClient.getName().equals(name)) + serverClient.writeUTF(text); + } + } + + public void sendMessage(String name, String text) { + for (ServerClient serverClient : clients) { + if (serverClient.getName().equals(name)) { + serverClient.writeUTF(text); + break; + } + } + } + + public void removeClient(ServerClient serverClient) { + this.clients.remove(serverClient); + try { + this.clientThreads.get(serverClient.getName()).join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + this.clientThreads.remove(serverClient.getName()); + this.sendToEveryone(serverClient.getName() + " left!"); + } + + @Override + public void run() { + boolean running = true; + while (running) { + System.out.println("Session thread active."); + connect(); + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } } diff --git a/core/src/netwerkprog/game/server/controllers/game/CharacterController.java b/core/src/netwerkprog/game/server/controllers/game/CharacterController.java index 0fbc74f..747d725 100644 --- a/core/src/netwerkprog/game/server/controllers/game/CharacterController.java +++ b/core/src/netwerkprog/game/server/controllers/game/CharacterController.java @@ -3,4 +3,12 @@ package netwerkprog.game.server.controllers.game; import netwerkprog.game.util.Controller; public class CharacterController extends Controller { + public CharacterController() { + + } + + @Override + public void run() { + + } } diff --git a/core/src/netwerkprog/game/server/controllers/game/GameController.java b/core/src/netwerkprog/game/server/controllers/game/GameController.java index 1d2094b..da41613 100644 --- a/core/src/netwerkprog/game/server/controllers/game/GameController.java +++ b/core/src/netwerkprog/game/server/controllers/game/GameController.java @@ -2,15 +2,36 @@ package netwerkprog.game.server.controllers.game; import netwerkprog.game.util.Controller; +import java.util.HashMap; + public class GameController extends Controller { + private int score; + private Timer timer; private final CharacterController characterController; private final ObjectController objectController; - private final ScoreController scoreController; + private HashMap objectives; - public GameController() { + private final int id; + + public GameController(int id) { this.characterController = new CharacterController(); this.objectController = new ObjectController(); - this.scoreController = new ScoreController(); + + this.id = id; } + @Override + public void run() { + boolean running = true; + while (running) { + System.out.println("game thread " + id + "active"); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + + } } diff --git a/core/src/netwerkprog/game/server/controllers/game/ObjectController.java b/core/src/netwerkprog/game/server/controllers/game/ObjectController.java index 341bb94..a372024 100644 --- a/core/src/netwerkprog/game/server/controllers/game/ObjectController.java +++ b/core/src/netwerkprog/game/server/controllers/game/ObjectController.java @@ -3,4 +3,12 @@ package netwerkprog.game.server.controllers.game; import netwerkprog.game.util.Controller; public class ObjectController extends Controller { + public ObjectController() { + + } + + @Override + public void run() { + + } } diff --git a/core/src/netwerkprog/game/server/controllers/game/Objective.java b/core/src/netwerkprog/game/server/controllers/game/Objective.java new file mode 100644 index 0000000..c544586 --- /dev/null +++ b/core/src/netwerkprog/game/server/controllers/game/Objective.java @@ -0,0 +1,4 @@ +package netwerkprog.game.server.controllers.game; + +public class Objective { +} diff --git a/core/src/netwerkprog/game/server/controllers/game/ScoreController.java b/core/src/netwerkprog/game/server/controllers/game/ScoreController.java deleted file mode 100644 index a10af5e..0000000 --- a/core/src/netwerkprog/game/server/controllers/game/ScoreController.java +++ /dev/null @@ -1,6 +0,0 @@ -package netwerkprog.game.server.controllers.game; - -import netwerkprog.game.util.Controller; - -public class ScoreController extends Controller { -} diff --git a/core/src/netwerkprog/game/server/controllers/game/Timer.java b/core/src/netwerkprog/game/server/controllers/game/Timer.java new file mode 100644 index 0000000..ca012bb --- /dev/null +++ b/core/src/netwerkprog/game/server/controllers/game/Timer.java @@ -0,0 +1,6 @@ +package netwerkprog.game.server.controllers.game; + +public class Timer { + public Timer() { + } +} diff --git a/core/src/netwerkprog/game/util/Controller.java b/core/src/netwerkprog/game/util/Controller.java index b47b2ec..b1693fb 100644 --- a/core/src/netwerkprog/game/util/Controller.java +++ b/core/src/netwerkprog/game/util/Controller.java @@ -1,5 +1,5 @@ package netwerkprog.game.util; -public abstract class Controller { +public abstract class Controller implements Runnable { }