From ab6792f2c19ddcf346386f7ff597ffbbfba278a9 Mon Sep 17 00:00:00 2001 From: David Roden Date: Sat, 25 Jan 2025 10:07:40 +0100 Subject: [PATCH] =?utf8?q?=F0=9F=9A=B8=20Allow=20multiple=20connections=20?= =?utf8?q?to=20MSTA=20server?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- server/src/main/java/de/qsheltier/msta/Server.java | 14 ++++++++------ server/src/test/java/de/qsheltier/msta/ServerTest.java | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) 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(); -- 2.7.4