From e61f98608c3cfaf027766fabe127580d26a66261 Mon Sep 17 00:00:00 2001 From: Elrabu <busch.elias@web.de> Date: Thu, 30 Nov 2023 16:34:18 +0100 Subject: [PATCH] Update: Added Getter/Setter to the ConnectionHandler class and added a stop method for the Thread in the server class. --- .../Multiplayer/{TestServer => }/Client.java | 5 +- .../Model/Multiplayer/ConnectionHandler.java | 57 +++++++++++++++++++ .../Multiplayer/{TestServer => }/Server.java | 38 +++++++++---- .../TestServer/ConnectionHandling.java | 30 ---------- 4 files changed, 86 insertions(+), 44 deletions(-) rename src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/{TestServer => }/Client.java (81%) create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java rename src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/{TestServer => }/Server.java (67%) delete mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/ConnectionHandling.java diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Client.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Client.java similarity index 81% rename from src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Client.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Client.java index d85b3389..25772788 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Client.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Client.java @@ -1,6 +1,5 @@ -package de.hdm_stuttgart.battlearena.Model.Multiplayer.TestServer; +package de.hdm_stuttgart.battlearena.Model.Multiplayer; -import de.hdm_stuttgart.battlearena.Model.Multiplayer.ConnectionHandler; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -13,7 +12,7 @@ public class Client { private PrintWriter out; private BufferedReader in; - private static final Logger log = LogManager.getLogger(ConnectionHandler.class); + private static final Logger log = LogManager.getLogger(Client.class); public void startConnection(String ip, int port) throws IOException { clientSocket = new Socket(ip, port); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java new file mode 100644 index 00000000..4bffdb53 --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java @@ -0,0 +1,57 @@ +package de.hdm_stuttgart.battlearena.Model.Multiplayer; + +import java.io.IOException; + +public class ConnectionHandler { + + private int pX; + private int pY; + private int enemyX; + private int enemyY; + + private static int[] coordinates = {5,10}; + + public static void main(String[] args) throws IOException, InterruptedException { + + Client client = new Client(); + client.startConnection("localhost", 4444); + int[] cords = client.sendcords(coordinates); + System.out.println(cords); + + //stop the connection: + client.stopConnection(); + } + + public int getpX() { + return pX; + } + + public void setpX(int pX) { + this.pX = pX; + } + + public int getpY() { + return pY; + } + + public void setpY(int pY) { + this.pY = pY; + } + + public int getEnemyX() { + return enemyX; + } + + public void setEnemyX(int enemyX) { + this.enemyX = enemyX; + } + + public int getEnemyY() { + return enemyY; + } + + public void setEnemyY(int enemyY) { + this.enemyY = enemyY; + } +} + diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Server.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java similarity index 67% rename from src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Server.java rename to src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java index 378a1f00..70956866 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/Server.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java @@ -1,12 +1,10 @@ -package de.hdm_stuttgart.battlearena.Model.Multiplayer.TestServer; +package de.hdm_stuttgart.battlearena.Model.Multiplayer; -import de.hdm_stuttgart.battlearena.Model.Multiplayer.GameServer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.net.*; import java.io.*; -import java.util.Arrays; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -15,9 +13,13 @@ public class Server { private static final Logger log = LogManager.getLogger(Server.class); private ServerSocket serverSocket; + private static boolean isServerRunning = true; private static int px; private static int py; + private static int enemyx; + private static int enemyy; + private static int[] cords; public static void main(String[] args) throws IOException { @@ -29,16 +31,9 @@ public class Server { public void start(String lolcalhost, int port) throws IOException { serverSocket = new ServerSocket(port); log.info("server started!"); - while (true) - new ServerHandler(serverSocket.accept()).start(); - } - - public void stop() throws IOException { - serverSocket.close(); + new ServerHandler(serverSocket.accept()).start(); } - // EchoClientHandler class in the Server - private static class ServerHandler extends Thread { private Socket clientSocket; private PrintWriter out; @@ -71,6 +66,18 @@ public class Server { log.info(cords); + //check if server was shut down: + if (!isServerRunning) { + executorService.shutdown(); + try { + if (!executorService.awaitTermination(5, TimeUnit.SECONDS)) { + executorService.shutdownNow(); + } + } catch (InterruptedException e) { + log.error("Error waiting for executor service termination: " + e.getMessage()); + } + } + } catch (IOException e) { throw new RuntimeException(e); } @@ -78,4 +85,13 @@ public class Server { } } + public void stopServer() { + isServerRunning = false; + try { + serverSocket.close(); // Close the server socket to break out of accept() in the main thread + } catch (IOException e) { + log.error("Error closing server socket: " + e.getMessage()); + } + } + } diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/ConnectionHandling.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/ConnectionHandling.java deleted file mode 100644 index e11381ac..00000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/TestServer/ConnectionHandling.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.hdm_stuttgart.battlearena.Model.Multiplayer.TestServer; - -import java.io.IOException; -import java.lang.reflect.Array; -import java.util.concurrent.TimeUnit; - -public class ConnectionHandling { - - private int px; - - private int py; - - private static int[] coordinates = {5,10}; - - public static void main(String[] args) throws IOException, InterruptedException { - Client client = new Client(); - client.startConnection("localhost", 4444); - int[] cords = client.sendcords(coordinates); - System.out.println(cords); - } - - public int getPx() { - return px; - } - - public int getPy() { - return py; - } -} - -- GitLab