Add: SessionDisconnectJob to publish DisconnectEvent when client timeouts
This commit is contained in:
+40
@@ -0,0 +1,40 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.casono.server.network.sessions;
|
||||||
|
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.events.EventBus;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.Instant;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
public class SessionDisconnectJob implements Runnable {
|
||||||
|
private final Logger logger;
|
||||||
|
private final SessionManager sessionManager;
|
||||||
|
private final EventBus eventBus;
|
||||||
|
private final Duration timeoutThreshold;
|
||||||
|
|
||||||
|
public SessionDisconnectJob(
|
||||||
|
SessionManager sessionManager, EventBus eventBus, Duration timeoutThreshold) {
|
||||||
|
this.logger = LogManager.getLogger(SessionDisconnectJob.class);
|
||||||
|
this.sessionManager = sessionManager;
|
||||||
|
this.eventBus = eventBus;
|
||||||
|
this.timeoutThreshold = timeoutThreshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
logger.debug("Job started.");
|
||||||
|
Instant threshold = Instant.now().minus(timeoutThreshold);
|
||||||
|
|
||||||
|
for (Session session : sessionManager.getAllSessions()) {
|
||||||
|
if (session.getLastInboundActivity().isBefore(threshold)) {
|
||||||
|
eventBus.publish(new DisconnectEvent(session.getId()));
|
||||||
|
logger.info(
|
||||||
|
"Initiated disconnect of {}, as it hasn't been active since a while",
|
||||||
|
session.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("Job finished.");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user