From 1c0b807a02ae4bb4163fff01523c0905a2c728cb Mon Sep 17 00:00:00 2001 From: magenoxx Date: Fri, 4 May 2012 22:49:04 +0400 Subject: [PATCH] [load] one place server ping --- .../src/main/java/mage/client/MageFrame.java | 12 ++++++++++++ Mage.Common/src/mage/interfaces/MageServer.java | 2 ++ Mage.Common/src/mage/remote/Session.java | 2 ++ Mage.Common/src/mage/remote/SessionImpl.java | 15 +++++++++++++++ .../main/java/mage/server/MageServerImpl.java | 5 +++++ .../main/java/mage/server/SessionManager.java | 17 +++++++++++------ Mage.Server/src/main/java/mage/server/User.java | 4 ++++ .../src/main/java/mage/server/UserManager.java | 12 ++++++++++-- 8 files changed, 61 insertions(+), 8 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index cfadab795aa..3d488bf5254 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -85,6 +85,9 @@ import java.io.IOException; import java.io.InputStream; import java.util.*; import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.prefs.Preferences; /** @@ -116,6 +119,8 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { private static Map tournaments = new HashMap(); private static MageUI ui = new MageUI(); + private static ScheduledExecutorService pingTaskExecutor = Executors.newSingleThreadScheduledExecutor(); + /** * @return the session */ @@ -193,6 +198,13 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { desktopPane.add(errorDialog, JLayeredPane.POPUP_LAYER); ui.addComponent(MageComponents.DESKTOP_PANE, desktopPane); + pingTaskExecutor.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + session.ping(); + } + }, 60, 60, TimeUnit.SECONDS); + try { tablesPane = new TablesPane(); desktopPane.add(tablesPane, javax.swing.JLayeredPane.DEFAULT_LAYER); diff --git a/Mage.Common/src/mage/interfaces/MageServer.java b/Mage.Common/src/mage/interfaces/MageServer.java index dcdc9228883..96b421ae0ac 100644 --- a/Mage.Common/src/mage/interfaces/MageServer.java +++ b/Mage.Common/src/mage/interfaces/MageServer.java @@ -51,6 +51,8 @@ public interface MageServer { public boolean setUserData(String userName, String sessionId, UserDataView userDataView) throws MageException; public ServerState getServerState() throws MageException; + + public boolean ping(String sessionId) throws MageException; //table methods public TableView createTable(String sessionId, UUID roomId, MatchOptions matchOptions) throws MageException; diff --git a/Mage.Common/src/mage/remote/Session.java b/Mage.Common/src/mage/remote/Session.java index a708e075dd8..1a1030ad77d 100644 --- a/Mage.Common/src/mage/remote/Session.java +++ b/Mage.Common/src/mage/remote/Session.java @@ -57,6 +57,8 @@ public interface Session { boolean isConnected(); + boolean ping(); + String[] getPlayerTypes(); List getGameTypes(); diff --git a/Mage.Common/src/mage/remote/SessionImpl.java b/Mage.Common/src/mage/remote/SessionImpl.java index 18634df8321..ce088048d98 100644 --- a/Mage.Common/src/mage/remote/SessionImpl.java +++ b/Mage.Common/src/mage/remote/SessionImpl.java @@ -1090,6 +1090,21 @@ public class SessionImpl implements Session { public void setEmbeddedMageServerAction(Action embeddedMageServerAction) { this.embeddedMageServerAction = embeddedMageServerAction; } + + @Override + public boolean ping() { + try { + if (isConnected()) { + server.ping(sessionId); + } + return true; + } catch (MageException ex) { + handleMageException(ex); + } catch (Throwable t) { + handleThrowable(t); + } + return false; + } } class MageAuthenticator extends Authenticator { diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index f1283001eb7..9d67fc2369b 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -248,6 +248,11 @@ public class MageServerImpl implements MageServer { } return null; } + + @Override + public boolean ping(String sessionId) { + return SessionManager.getInstance().extendUserSession(sessionId); + } @Override public void deregisterClient(final String sessionId) throws MageException { diff --git a/Mage.Server/src/main/java/mage/server/SessionManager.java b/Mage.Server/src/main/java/mage/server/SessionManager.java index f8b076e6cbf..00a7d04ccbe 100644 --- a/Mage.Server/src/main/java/mage/server/SessionManager.java +++ b/Mage.Server/src/main/java/mage/server/SessionManager.java @@ -28,19 +28,17 @@ package mage.server; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import mage.MageException; -import mage.players.net.UserData; -import mage.players.net.UserGroup; import mage.server.services.LogKeys; -import mage.server.services.LogService; import mage.server.services.impl.LogServiceImpl; import mage.view.UserDataView; import org.apache.log4j.Logger; import org.jboss.remoting.callback.InvokerCallbackHandler; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + /** * * @author BetaSteward_at_googlemail.com @@ -148,4 +146,11 @@ public class SessionManager { } return null; } + + public boolean extendUserSession(String sessionId) { + if (sessions.containsKey(sessionId)) { + return UserManager.getInstance().extendUserSession(sessions.get(sessionId).getUserId()); + } + return false; + } } diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index 5a6bf717278..f653f98305e 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -177,6 +177,10 @@ public class User { lastActivity = new Date(); GameManager.getInstance().sendPlayerInteger(gameId, userId, data); } + + public void updateLastActivity() { + lastActivity = new Date(); + } public boolean isExpired(Date expired) { return /*userState == UserState.Disconnected && */ lastActivity.before(expired); diff --git a/Mage.Server/src/main/java/mage/server/UserManager.java b/Mage.Server/src/main/java/mage/server/UserManager.java index 3a2474411f9..8ff58004e0f 100644 --- a/Mage.Server/src/main/java/mage/server/UserManager.java +++ b/Mage.Server/src/main/java/mage/server/UserManager.java @@ -124,13 +124,21 @@ public class UserManager { users.remove(userId); } } + + public boolean extendUserSession(UUID userId) { + if (users.containsKey(userId)) { + users.get(userId).updateLastActivity(); + return true; + } + return false; + } private void checkExpired() { Calendar expired = Calendar.getInstance(); - expired.add(Calendar.MINUTE, -2) ; + expired.add(Calendar.MINUTE, -3) ; for (User user: users.values()) { if (user.isExpired(expired.getTime())) { - logger.info("user session expired " + user.getId()); + logger.info(user.getName() + " session expired " + user.getId()); user.kill(); users.remove(user.getId()); }