From: David Roden Date: Sat, 25 Jan 2025 09:07:40 +0000 (+0100) Subject: 🚸 Allow multiple connections to MSTA server X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=ab6792f2c19ddcf346386f7ff597ffbbfba278a9;p=msta.git 🚸 Allow multiple connections to MSTA server --- diff --git a/server/src/main/java/de/qsheltier/msta/Server.java b/server/src/main/java/de/qsheltier/msta/Server.java index dce8b8b..c11c9ff 100644 --- a/server/src/main/java/de/qsheltier/msta/Server.java +++ b/server/src/main/java/de/qsheltier/msta/Server.java @@ -76,13 +76,15 @@ public class Server implements Closeable { public void start() throws InterruptedException { var startLatch = new CountDownLatch(1); new Thread(() -> { - try { - startLatch.countDown(); - try (var socket = serverSocket.accept()) { - handleSocket(socket.getInputStream(), socket.getOutputStream()); + startLatch.countDown(); + while (true) { + try { + try (var socket = serverSocket.accept()) { + handleSocket(socket.getInputStream(), socket.getOutputStream()); + } + } catch (IOException e) { + /* swallow exceptions. */ } - } catch (IOException e) { - /* swallow exceptions. */ } }).start(); startLatch.await(); diff --git a/server/src/test/java/de/qsheltier/msta/ServerTest.java b/server/src/test/java/de/qsheltier/msta/ServerTest.java index 480b90c..d25b448 100644 --- a/server/src/test/java/de/qsheltier/msta/ServerTest.java +++ b/server/src/test/java/de/qsheltier/msta/ServerTest.java @@ -103,6 +103,24 @@ public class ServerTest { } } + @Test + @Timeout(value = 5, unit = TimeUnit.SECONDS, threadMode = SEPARATE_THREAD) + public void serverCanHandleMultipleConnections() throws Exception { + try (var server = new Server()) { + server.start(); + try (var connection = new Socket("localhost", server.getPort()); + var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + var line = reader.readLine(); + assertThat(line, equalTo("{\"event\":\"connected\"}")); + } + try (var connection = new Socket("localhost", server.getPort()); + var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + var line = reader.readLine(); + assertThat(line, equalTo("{\"event\":\"connected\"}")); + } + } + } + private static void connectToServerAndWaitForEvent(ThrowingConsumer readerConsumer) throws Throwable { try (var server = new Server()) { server.start();