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 { }