Add: Let Session publish DisconnectEvent and EventHandler subscribe and handle it
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user