diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index 9a4d55d760d..1249918bcb4 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -41,7 +41,7 @@ public class User { Created, // Used if user is created an not connected to the session Connected, // Used if user is correctly connected Disconnected, // Used if the user lost connection - Offline // set if the user was disconnected and expired or regularly left XMage. Removed is the user later after some time + Offline // Used if user was disconnected too long, offline users removes from users list by service routines } private final ManagerFactory managerFactory; @@ -854,4 +854,9 @@ public class User { AuthorizedUserRepository.getInstance().update(authorizedUser); } } + + public boolean isOnlineUser() { + return this.getUserState() != User.UserState.Offline + && !this.getName().equals(User.ADMIN_NAME); + } } diff --git a/Mage.Server/src/main/java/mage/server/UserManagerImpl.java b/Mage.Server/src/main/java/mage/server/UserManagerImpl.java index d2cf1068865..20f2fa0a3ff 100644 --- a/Mage.Server/src/main/java/mage/server/UserManagerImpl.java +++ b/Mage.Server/src/main/java/mage/server/UserManagerImpl.java @@ -34,6 +34,7 @@ public class UserManagerImpl implements UserManager { protected final ScheduledExecutorService userListExecutor = Executors.newSingleThreadScheduledExecutor(); private List userInfoList = new ArrayList<>(); // all users list for main room/chat + private int maxUsersOnline = 0; private final ManagerFactory managerFactory; @@ -283,6 +284,7 @@ public class UserManagerImpl implements UserManager { private void updateUserInfoList() { try { List newUserInfoList = new ArrayList<>(); + int currentOnlineCount = 0; for (User user : getUsers()) { newUserInfoList.add(new UserView( user.getName(), @@ -297,8 +299,18 @@ public class UserManagerImpl implements UserManager { user.getEmail(), user.getUserIdStr() )); + + if (user.isOnlineUser()) { + currentOnlineCount++; + } } userInfoList = newUserInfoList; + + // max users online stats + if (currentOnlineCount > maxUsersOnline) { + maxUsersOnline = currentOnlineCount; + logger.info(String.format("New max users online: %d", maxUsersOnline)); + } } catch (Exception ex) { handleException(ex); } diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java index f28583e2637..a161afcb1cb 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java @@ -81,8 +81,7 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { matchView = matchList; List users = new ArrayList<>(); for (User user : managerFactory.userManager().getUsers()) { - if (user.getUserState() != User.UserState.Offline - && !user.getName().equals(User.ADMIN_NAME)) { + if (user.isOnlineUser()) { try { users.add(new UsersView(user.getUserData().getFlagName(), user.getName(), user.getMatchHistory(), user.getMatchQuitRatio(), user.getTourneyHistory(),