forked from External/mage
added client/server ping + remove inactive connections from server
This commit is contained in:
parent
774d56dd6b
commit
ab599dd335
7 changed files with 105 additions and 20 deletions
|
|
@ -30,6 +30,9 @@ package mage.server;
|
|||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import mage.interfaces.MageException;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
|
@ -41,15 +44,20 @@ public class SessionManager {
|
|||
|
||||
private final static Logger logger = Logger.getLogger(SessionManager.class);
|
||||
private final static SessionManager INSTANCE = new SessionManager();
|
||||
private static ScheduledExecutorService sessionExecutor;
|
||||
|
||||
public static SessionManager getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
protected SessionManager() {
|
||||
sessionExecutor = Executors.newScheduledThreadPool(1);
|
||||
sessionExecutor.scheduleWithFixedDelay(new SessionChecker(), 30, 10, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
private ConcurrentHashMap<UUID, Session> sessions = new ConcurrentHashMap<UUID, Session>();
|
||||
|
||||
public Session getSession(UUID sessionId) {
|
||||
if (sessions == null || sessionId == null) return null;
|
||||
return sessions.get(sessionId);
|
||||
}
|
||||
|
||||
|
|
@ -74,5 +82,24 @@ public class SessionManager {
|
|||
public void removeSession(UUID sessionId) {
|
||||
sessions.remove(sessionId);
|
||||
}
|
||||
|
||||
|
||||
public void checkSessions() {
|
||||
for (Session session: sessions.values()) {
|
||||
if (!session.stillAlive()) {
|
||||
logger.info("Client for user " + session.getUsername() + " timed out - releasing resources");
|
||||
session.kill();
|
||||
sessions.remove(session.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SessionChecker implements Runnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
checkSessions();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue