From 54588276d116031bb2aad90af8bbac59cc00a749 Mon Sep 17 00:00:00 2001 From: Lars Simon Winzer Date: Thu, 12 Mar 2026 19:15:25 +0100 Subject: [PATCH] Add: Let Session publish DisconnectEvent and EventHandler subscribe and handle it --- .../dmi/dbis/cs108/casono/server/ServerApp.java | 4 +++- .../cs108/casono/server/network/NetworkManager.java | 11 +++++++++-- .../dmi/dbis/cs108/casono/server/network/Session.java | 5 ++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java index e7dd3f3..d056413 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/ServerApp.java @@ -1,5 +1,6 @@ package ch.unibas.dmi.dbis.cs108.casono.server; +import ch.unibas.dmi.dbis.cs108.casono.server.network.EventBus; import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager; public class ServerApp { @@ -7,7 +8,8 @@ public class ServerApp { int port = Integer.parseInt(arg); System.out.println("You've selected the server. It will accept connections at port " + port); - NetworkManager networkManager = new NetworkManager(port); + EventBus eventBus = new EventBus(); + NetworkManager networkManager = new NetworkManager(port, eventBus); networkManager.start(); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/NetworkManager.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/NetworkManager.java index aed074a..8699852 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/NetworkManager.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/NetworkManager.java @@ -15,12 +15,15 @@ public class NetworkManager implements Runnable { private Logger logger; private Thread thread; private Boolean running; + private EventBus eventBus; - public NetworkManager(Integer port) { + public NetworkManager(Integer port, EventBus eventBus) { this.port = port; this.logger = LogManager.getLogger(NetworkManager.class); this.thread = new Thread(this, "networkManager"); this.running = true; + this.eventBus = eventBus; + this.eventBus.subscribe(DisconnectEvent.class, event -> clientDisconnected(event)); } /* Starts the internal thread to accept new connections. @@ -30,6 +33,10 @@ public class NetworkManager implements Runnable { thread.start(); } + public void clientDisconnected(DisconnectEvent event) { + logger.info("Session " + event.sessionId().value() + " disconnected adhasghd"); + } + @Override public void run() { try (ServerSocket serverSocket = new ServerSocket(port)) { @@ -38,7 +45,7 @@ public class NetworkManager implements Runnable { System.out.println("Accepted connection from " + clientSocket.getRemoteSocketAddress()); - Session session = new Session(new TcpTransport(clientSocket)); + Session session = new Session(new TcpTransport(clientSocket), eventBus); session.start(); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/Session.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/Session.java index 24b30d2..1ae946c 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/Session.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/Session.java @@ -11,12 +11,14 @@ public class Session implements Runnable { private TransportLayer transport; private Logger logger; private Boolean running; + private EventBus eventBus; - public Session(TransportLayer transport) throws IOException { + public Session(TransportLayer transport, EventBus eventBus) throws IOException { this.id = new SessionId(); this.thread = new Thread(this, "session-" + this.id.value()); this.transport = transport; this.running = true; + this.eventBus = eventBus; this.logger = LogManager.getLogger(Session.class.toString() + id.value()); this.logger.info("Created new session"); @@ -42,6 +44,7 @@ public class Session implements Runnable { System.out.println("Recieved: " + transport.read()); } catch (EOFException e) { logger.info("Client disconnected"); + eventBus.publish(new DisconnectEvent(id)); break; } catch (IOException e) { e.printStackTrace();