🚸 Allow multiple connections to MSTA server
authorDavid Roden <github-a8in@qsheltier.de>
Sat, 25 Jan 2025 09:07:40 +0000 (10:07 +0100)
committerDavid Roden <github-a8in@qsheltier.de>
Sat, 25 Jan 2025 09:27:49 +0000 (10:27 +0100)
server/src/main/java/de/qsheltier/msta/Server.java
server/src/test/java/de/qsheltier/msta/ServerTest.java

index dce8b8b..c11c9ff 100644 (file)
@@ -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();
index 480b90c..d25b448 100644 (file)
@@ -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<BufferedReader> readerConsumer) throws Throwable {
                try (var server = new Server()) {
                        server.start();