diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Client.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Client.java index 23b1c65ccd218152576cc9c7d366e68c65d1c591..9817c0d2601718d4b0ce6d731097a6466eb2abe9 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Client.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Client.java @@ -30,14 +30,13 @@ public class Client { public static int[] convertStringToArray(String inputString) { // Remove brackets and split by comma - String[] parts = inputString.substring(1, inputString.length() - 1).split(","); + String[] parts = inputString.substring(1, inputString.length() - 1).split(","); //1 .length() -1 // Convert each part to integer int[] result = new int[parts.length]; for (int i = 0; i < parts.length; i++) { result[i] = Integer.parseInt(parts[i].trim()); } - return result; } 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 index ec33d875df97fe74ee69a806c5842c00bc416414..c1caafadcea8175884a736e19db31a4164e9bb08 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java @@ -65,7 +65,7 @@ public class ConnectionHandler { coordinates[4] = playerClass; coordinates[5] = playerWalkDirection; coordinates[6] = playerHealth; - Thread.sleep(50); + Thread.sleep(60); } } catch (InterruptedException | IOException e) { e.printStackTrace(); // Handle the exception as needed diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java index 19c96a42a10b8824007c23cfff9468781493b9b7..32ee4320d12999d77fc19bb1b4deae32433d779e 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java @@ -36,26 +36,36 @@ public class Server { private static String ipaddress = "localhost"; //Uncomment these lines to test the server starting manually: - /* public static void main(String[] args) throws IOException { //main method for testing purposes + /* public static void main(String[] args) throws IOException { //main method for testing purposes Server server = new Server(); log.info("server starting..."); - server.start(ipaddress, 4444); + server.start(4444); } */ //use this method to start the server from another class public void startServer() throws IOException { Server server = new Server(); log.info("server starting..."); - server.start(ipaddress,4444); + server.start(4444); } - public void start(String host_ip, int port) throws IOException { + public void start(int port) throws IOException { serverSocket = new ServerSocket(port); log.info("server started!"); started = true; - while (true){ - new ServerHandler(serverSocket.accept()).start(); - } + + log.info("server accepting Thread starting..."); + Thread serverThread = new Thread(() -> { + while (true) { + try { + new ServerHandler(serverSocket.accept()).start(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + serverThread.start(); + log.info("requests accepting Thread started!"); } private static class ServerHandler extends Thread { @@ -150,7 +160,7 @@ public class Server { } log.info("Player (X Y) : " + px + " " + py + " Attacking : " + playerAttacking + " direction : " + playerWalkDirection + " HP: " + playerHealth); - log.info(" Enemy (X Y) : " + enemyx + " " + enemyy + " Attacking : " + enemyAttacking + " direction : " + enemyWalkDirection + " HP: " + enemyHealth); + log.info("Enemy (X Y) : " + enemyx + " " + enemyy + " Attacking : " + enemyAttacking + " direction : " + enemyWalkDirection + " HP: " + enemyHealth); //check if server was shut down:W if (!isServerRunning) { diff --git a/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ClientTest.java b/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ClientTest.java new file mode 100644 index 0000000000000000000000000000000000000000..541d65a2b2f6e1420a866f31548043078b5f9bfb --- /dev/null +++ b/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ClientTest.java @@ -0,0 +1,18 @@ +package de.hdm_stuttgart.battlearena.Model.Multiplayer; + +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.*; + +class ClientTest { + + @Test + void convertStringToArray() { + int[] array = {23}; //Array must be formatted like this for Server transfer + int[] result = Client.convertStringToArray("1234"); + assertEquals(Arrays.toString(array), Arrays.toString(result)); + + } +} \ No newline at end of file diff --git a/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandlerTest.java b/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandlerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..fa4a0e2aee3c7a7338b65f7c61f830c171e7cb36 --- /dev/null +++ b/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandlerTest.java @@ -0,0 +1,143 @@ +package de.hdm_stuttgart.battlearena.Model.Multiplayer; + +import de.hdm_stuttgart.battlearena.Model.Entity.EntityClass; +import de.hdm_stuttgart.battlearena.Model.Entity.EntityDirection; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ConnectionHandlerTest { + + ConnectionHandler handler = new ConnectionHandler(); + + @Test + void getPlayerID() { + assertEquals(0,handler.getPlayerID()); + } + + @Test + void getpX() { + assertEquals(0,handler.getpX()); + } + + @Test + void setpX() { + handler.setpX(1); + assertEquals(1,handler.getpX()); + } + + @Test + void getpY() { + assertEquals(0,handler.getpY()); + } + + @Test + void setpY() { + handler.setpY(1); + assertEquals(1,handler.getpY()); + } + + @Test + void getEnemyX() { + assertEquals(0,handler.getEnemyX()); + } + + @Test + void getEnemyY() { + assertEquals(0,handler.getEnemyY()); + } + + @Test + void getPlayerAttacking() { + assertEquals(true,ConnectionHandler.getPlayerAttacking()); + } + + @Test + void setPlayerAttacking() { + ConnectionHandler.setPlayerAttacking(false); + assertEquals(false,ConnectionHandler.getPlayerAttacking()); + ConnectionHandler.setPlayerAttacking(true); + } + + @Test + void getEnemyAttacking() { + assertEquals(false,ConnectionHandler.getEnemyAttacking()); + } + + @Test + void setEnemyAttacking() { + ConnectionHandler.setEnemyAttacking(true); + assertEquals(true,ConnectionHandler.getEnemyAttacking()); + ConnectionHandler.setEnemyAttacking(false); + } + + @Test + void getPlayerClass() { + assertEquals(EntityClass.HUMAN, ConnectionHandler.getPlayerClass()); + + } + + @Test + void setPlayerClass() { + ConnectionHandler.setPlayerClass(EntityClass.HIGH_BORN); + assertEquals(EntityClass.HIGH_BORN, ConnectionHandler.getPlayerClass()); + ConnectionHandler.setPlayerClass(EntityClass.HUMAN); + } + + @Test + void getEnemyClass() { + assertEquals(EntityClass.HUMAN, ConnectionHandler.getEnemyClass()); + } + + @Test + void setEnemyClass() { + ConnectionHandler.setEnemyClass(EntityClass.HIGH_BORN); + assertEquals(EntityClass.HIGH_BORN, ConnectionHandler.getEnemyClass()); + ConnectionHandler.setEnemyClass(EntityClass.HUMAN); + } + + @Test + void getPlayerWalkDirection() { + assertEquals(EntityDirection.DOWN, ConnectionHandler.getPlayerWalkDirection()); + } + + @Test + void setPlayerWalkDirection() { + ConnectionHandler.setPlayerWalkDirection(EntityDirection.UP); + assertEquals(EntityDirection.UP, ConnectionHandler.getPlayerWalkDirection()); + ConnectionHandler.setPlayerWalkDirection(EntityDirection.DOWN); + } + + @Test + void getEnemyWalkDirection() { + assertEquals(EntityDirection.DOWN, ConnectionHandler.getPlayerWalkDirection()); + } + + @Test + void setEnemyWalkDirection() { + ConnectionHandler.setEnemyWalkDirection(EntityDirection.UP); + assertEquals(EntityDirection.UP, ConnectionHandler.getEnemyWalkDirection()); + } + + @Test + void getPlayerHealth() { + assertEquals(10, ConnectionHandler.getPlayerHealth()); + } + + @Test + void setPlayerHealth() { + ConnectionHandler.setPlayerHealth(5); + assertEquals(5, ConnectionHandler.getPlayerHealth()); + } + + @Test + void getEnemyHealth() { + assertEquals(10, ConnectionHandler.getEnemyHealth()); + } + + @Test + void setEnemyHealth() { + ConnectionHandler.setEnemyHealth(5); + assertEquals(5, ConnectionHandler.getEnemyHealth()); + } +} \ No newline at end of file diff --git a/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ServerTest.java b/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ServerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9d0ad878e4c34c8518f470bd4b0193c96336bfb2 --- /dev/null +++ b/src/test/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ServerTest.java @@ -0,0 +1,43 @@ +package de.hdm_stuttgart.battlearena.Model.Multiplayer; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.net.ServerSocket; +import java.util.concurrent.TimeUnit; + +import static org.junit.jupiter.api.Assertions.*; + +class ServerTest { + + private static final Logger log = LogManager.getLogger(Server.class); + + private ServerSocket serverSocket; + private int port = 3333; + private boolean started = false; + + @Test + void startServerSocket() throws IOException { + Server server = new Server(); + server.start(port); //check if the serversocket of the server is started + assertTrue(server.isStarted()); + } + + @Test + void stopServer() throws IOException { + + Server server = new Server(); + server.startServer(); + + try{ + serverSocket.close(); + started = false; + }catch (NullPointerException e){ + //Throws a NullPointer Exception because not connection is active currently + log.info("No active connection to close!"); + } + assertFalse(started); + } +} \ No newline at end of file