Handle exit status

Added so clients can send "exit" to break out of the while loop
This commit is contained in:
Jesper Saastamoinen 2024-12-13 10:21:48 +01:00
parent 47ac4552ab
commit 18239fce80
2 changed files with 10 additions and 5 deletions

View file

@ -22,11 +22,12 @@ class ClientHandler extends Thread {
if(bytesRead == -1){ if(bytesRead == -1){
System.out.println("Client closed the Connection"); System.out.println("Client closed the Connection");
} }
String message = new String(buffer, 0, bytesRead); String message = new String(buffer, 0, bytesRead);
System.out.println("Received message from client: " + message); 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); SocketServer.messageQueue.put(message);

View file

@ -16,6 +16,7 @@ import java.util.concurrent.LinkedBlockingQueue;
public class SocketServer implements FrojCallable { public class SocketServer implements FrojCallable {
protected static BlockingQueue<String> messageQueue = new LinkedBlockingQueue<>(); protected static BlockingQueue<String> messageQueue = new LinkedBlockingQueue<>();
private static ServerSocket serverSocket; private static ServerSocket serverSocket;
private final String EXIT_CODE = "EXIT";
@Override @Override
public int arity() { public int arity() {
return 1; return 1;
@ -26,9 +27,8 @@ public class SocketServer implements FrojCallable {
try { try {
Double param = (Double) arguments.get(0); Double param = (Double) arguments.get(0);
int port = param.intValue(); int port = param.intValue();
serverSocket = new ServerSocket(port);
System.out.println("Server started. Listening for incoming connections...");
serverSocket = new ServerSocket(port);
while (true) { while (true) {
Socket socket = serverSocket.accept(); Socket socket = serverSocket.accept();
System.out.println("Incoming connection from " + socket.getInetAddress()); System.out.println("Incoming connection from " + socket.getInetAddress());
@ -36,13 +36,17 @@ public class SocketServer implements FrojCallable {
ClientHandler clientHandler = new ClientHandler(socket); ClientHandler clientHandler = new ClientHandler(socket);
clientHandler.start(); clientHandler.start();
String nextMessage = getNextMessage(); String nextMessage = getNextMessage();
if(nextMessage.toLowerCase().contentEquals("exit")){
shutdown();
break;
}
try{ try{
return Double.parseDouble(nextMessage); return Double.parseDouble(nextMessage);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
return nextMessage; return nextMessage;
} }
} }
return EXIT_CODE;
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e.getMessage()); throw new RuntimeException(e.getMessage());
} catch (InterruptedException e) { } catch (InterruptedException e) {