From 198c1bfdd836f8f1dba0c89a4416feeea253e304 Mon Sep 17 00:00:00 2001 From: MickWerf Date: Mon, 18 May 2020 15:39:09 +0200 Subject: [PATCH] Fixed Shutdown to truely shut down the sessionController actions and closes the thread. Added testcode to RestartSessionControllerTest to test for no errors. --- .../server/controllers/SessionController.java | 12 ++++++-- .../java/RestartSessionControllerTest.java | 30 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 core/src/test/java/RestartSessionControllerTest.java diff --git a/core/src/netwerkprog/game/server/controllers/SessionController.java b/core/src/netwerkprog/game/server/controllers/SessionController.java index f82356c..f82b32d 100644 --- a/core/src/netwerkprog/game/server/controllers/SessionController.java +++ b/core/src/netwerkprog/game/server/controllers/SessionController.java @@ -19,6 +19,7 @@ import java.util.Set; * The sessionController manages any connections from new clients and assigns individual threads to said clients. */ public class SessionController extends Controller { + private ServerSocket serverSocket; private final DataParser parser; private final ArrayList clients = new ArrayList<>(); private final HashMap clientThreads = new HashMap<>(); @@ -34,6 +35,7 @@ public class SessionController extends Controller { */ @Override public void run() { + this.listening = true; while (listening) { listen(); } @@ -44,10 +46,10 @@ public class SessionController extends Controller { */ public void listen() { try { - ServerSocket serverSocket = new ServerSocket(ServerData.port()); + this.serverSocket = new ServerSocket(ServerData.port()); System.out.println("[SERVER] listening on port " + ServerData.port()); registerClient(serverSocket.accept()); - serverSocket.close(); + this.serverSocket.close(); } catch (IOException ex) { ex.printStackTrace(); } @@ -140,5 +142,11 @@ public class SessionController extends Controller { */ public void shutdown() { this.listening = false; + try { + serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + System.out.println("[SERVER] networking shutdown "); } } diff --git a/core/src/test/java/RestartSessionControllerTest.java b/core/src/test/java/RestartSessionControllerTest.java new file mode 100644 index 0000000..efd4ede --- /dev/null +++ b/core/src/test/java/RestartSessionControllerTest.java @@ -0,0 +1,30 @@ +import netwerkprog.game.server.controllers.SessionController; +import org.junit.Test; + +public class RestartSessionControllerTest { + + @Test + public void restartSessionController() { + SessionController sessionController; + Thread sessionThread; + + sessionController = new SessionController(); + sessionThread = new Thread(sessionController); + + sessionThread.start(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + sessionController.shutdown(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println(sessionThread.getState()); + sessionThread = new Thread(sessionController); + sessionThread.start(); + } +}