Add: Let Session publish DisconnectEvent and EventHandler subscribe and handle it

This commit is contained in:
Lars Simon Winzer
2026-03-12 19:15:25 +01:00
parent fc8a92789a
commit 54588276d1
3 changed files with 16 additions and 4 deletions
@@ -1,5 +1,6 @@
package ch.unibas.dmi.dbis.cs108.casono.server; 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; import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager;
public class ServerApp { public class ServerApp {
@@ -7,7 +8,8 @@ public class ServerApp {
int port = Integer.parseInt(arg); int port = Integer.parseInt(arg);
System.out.println("You've selected the server. It will accept connections at port " + port); 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(); networkManager.start();
} }
} }
@@ -15,12 +15,15 @@ public class NetworkManager implements Runnable {
private Logger logger; private Logger logger;
private Thread thread; private Thread thread;
private Boolean running; private Boolean running;
private EventBus eventBus;
public NetworkManager(Integer port) { public NetworkManager(Integer port, EventBus eventBus) {
this.port = port; this.port = port;
this.logger = LogManager.getLogger(NetworkManager.class); this.logger = LogManager.getLogger(NetworkManager.class);
this.thread = new Thread(this, "networkManager"); this.thread = new Thread(this, "networkManager");
this.running = true; this.running = true;
this.eventBus = eventBus;
this.eventBus.subscribe(DisconnectEvent.class, event -> clientDisconnected(event));
} }
/* Starts the internal thread to accept new connections. /* Starts the internal thread to accept new connections.
@@ -30,6 +33,10 @@ public class NetworkManager implements Runnable {
thread.start(); thread.start();
} }
public void clientDisconnected(DisconnectEvent event) {
logger.info("Session " + event.sessionId().value() + " disconnected adhasghd");
}
@Override @Override
public void run() { public void run() {
try (ServerSocket serverSocket = new ServerSocket(port)) { try (ServerSocket serverSocket = new ServerSocket(port)) {
@@ -38,7 +45,7 @@ public class NetworkManager implements Runnable {
System.out.println("Accepted connection from " + clientSocket.getRemoteSocketAddress()); 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(); session.start();
} }
@@ -11,12 +11,14 @@ public class Session implements Runnable {
private TransportLayer transport; private TransportLayer transport;
private Logger logger; private Logger logger;
private Boolean running; 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.id = new SessionId();
this.thread = new Thread(this, "session-" + this.id.value()); this.thread = new Thread(this, "session-" + this.id.value());
this.transport = transport; this.transport = transport;
this.running = true; this.running = true;
this.eventBus = eventBus;
this.logger = LogManager.getLogger(Session.class.toString() + id.value()); this.logger = LogManager.getLogger(Session.class.toString() + id.value());
this.logger.info("Created new session"); this.logger.info("Created new session");
@@ -42,6 +44,7 @@ public class Session implements Runnable {
System.out.println("Recieved: " + transport.read()); System.out.println("Recieved: " + transport.read());
} catch (EOFException e) { } catch (EOFException e) {
logger.info("Client disconnected"); logger.info("Client disconnected");
eventBus.publish(new DisconnectEvent(id));
break; break;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();