From 18239fce80c60a52dd024359c376c80eefbb7b45 Mon Sep 17 00:00:00 2001 From: Jesper Saastamoinen Date: Fri, 13 Dec 2024 10:21:48 +0100 Subject: [PATCH] Handle exit status Added so clients can send "exit" to break out of the while loop --- src/com/jsaasta/froj/stdlib/socket/ClientHandler.java | 5 +++-- src/com/jsaasta/froj/stdlib/socket/SocketServer.java | 10 +++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/com/jsaasta/froj/stdlib/socket/ClientHandler.java b/src/com/jsaasta/froj/stdlib/socket/ClientHandler.java index 68a45bd..e005504 100644 --- a/src/com/jsaasta/froj/stdlib/socket/ClientHandler.java +++ b/src/com/jsaasta/froj/stdlib/socket/ClientHandler.java @@ -22,11 +22,12 @@ class ClientHandler extends Thread { if(bytesRead == -1){ System.out.println("Client closed the Connection"); } + String message = new String(buffer, 0, bytesRead); System.out.println("Received message from client: " + message); - String response = "Hello from froj!"; - out.write(response.getBytes()); + + out.write(message.getBytes()); SocketServer.messageQueue.put(message); diff --git a/src/com/jsaasta/froj/stdlib/socket/SocketServer.java b/src/com/jsaasta/froj/stdlib/socket/SocketServer.java index 2b7e470..3e4ed96 100644 --- a/src/com/jsaasta/froj/stdlib/socket/SocketServer.java +++ b/src/com/jsaasta/froj/stdlib/socket/SocketServer.java @@ -16,6 +16,7 @@ import java.util.concurrent.LinkedBlockingQueue; public class SocketServer implements FrojCallable { protected static BlockingQueue messageQueue = new LinkedBlockingQueue<>(); private static ServerSocket serverSocket; + private final String EXIT_CODE = "EXIT"; @Override public int arity() { return 1; @@ -26,9 +27,8 @@ public class SocketServer implements FrojCallable { try { Double param = (Double) arguments.get(0); int port = param.intValue(); - serverSocket = new ServerSocket(port); - System.out.println("Server started. Listening for incoming connections..."); + serverSocket = new ServerSocket(port); while (true) { Socket socket = serverSocket.accept(); System.out.println("Incoming connection from " + socket.getInetAddress()); @@ -36,13 +36,17 @@ public class SocketServer implements FrojCallable { ClientHandler clientHandler = new ClientHandler(socket); clientHandler.start(); String nextMessage = getNextMessage(); + if(nextMessage.toLowerCase().contentEquals("exit")){ + shutdown(); + break; + } try{ return Double.parseDouble(nextMessage); } catch (NumberFormatException e) { return nextMessage; } } - + return EXIT_CODE; } catch (IOException e) { throw new RuntimeException(e.getMessage()); } catch (InterruptedException e) {