From 2079065af3eab7d8a412613fd2a5af4585f2d078 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 31 Jan 2020 22:30:31 +0400 Subject: [PATCH] * Server: added /pings chat command to show players and watchers ping info; --- .../client/remote/CallbackClientImpl.java | 3 ++- .../main/java/mage/server/ChatManager.java | 25 +++++++++++++++++-- .../java/mage/server/game/GameController.java | 23 +++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java index 92cc8f2f8d3..512a6cfa8bf 100644 --- a/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java +++ b/Mage.Client/src/main/java/mage/client/remote/CallbackClientImpl.java @@ -433,7 +433,8 @@ public class CallbackClientImpl implements CallbackClient { .append(KeyEvent.getKeyText(PreferencesDialog.getCurrentControlKey(PreferencesDialog.KEY_CONTROL_TOGGLE_MACRO))) .append(" - Toggle recording a sequence of actions to repeat. Will not pause if interrupted and can fail if a selected card changes such as when scrying top card to bottom.") .append("
").append(System.getProperty("os.name").contains("Mac OS X") ? "Cmd" : "Ctrl").append(" + click - Hold priority while casting a spell or activating an ability") - .append("
").append("Type /FIX message in chat to fix freezed game") + .append("
").append("Type /fix message in chat to fix freezed game") + .append("
").append("Type /pings message in chat to show players and watchers ping") .toString(), null, MessageType.USER_INFO, ChatMessage.MessageColor.BLUE); break; diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java index 0676e316863..82a8d2f7bd0 100644 --- a/Mage.Server/src/main/java/mage/server/ChatManager.java +++ b/Mage.Server/src/main/java/mage/server/ChatManager.java @@ -201,7 +201,7 @@ public enum ChatManager { return true; } if (command.startsWith("GAME")) { - message += "
" + GameManager.instance.getChatId(chatId); + message += "
"; ChatSession session = chatSessions.get(chatId); if (session != null && session.getInfo() != null) { String gameId = session.getInfo(); @@ -222,7 +222,7 @@ public enum ChatManager { return true; } if (command.startsWith("FIX")) { - message += "
" + GameManager.instance.getChatId(chatId); + message += "
"; ChatSession session = chatSessions.get(chatId); if (session != null && session.getInfo() != null) { String gameId = session.getInfo(); @@ -242,6 +242,27 @@ public enum ChatManager { } return true; } + if (command.equals("PINGS")) { + message += "
"; + ChatSession session = chatSessions.get(chatId); + if (session != null && session.getInfo() != null) { + String gameId = session.getInfo(); + if (gameId.startsWith("Game ")) { + UUID id = java.util.UUID.fromString(gameId.substring(5)); + for (Entry entry : GameManager.instance.getGameController().entrySet()) { + if (entry.getKey().equals(id)) { + GameController controller = entry.getValue(); + if (controller != null) { + message += controller.getPingsInfo(); + chatSessions.get(chatId).broadcastInfoToUser(user, message); + } + } + } + + } + } + return true; + } if (command.startsWith("CARD ")) { Matcher matchPattern = getCardTextPattern.matcher(message.toLowerCase(Locale.ENGLISH)); if (matchPattern.find()) { diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index 86818d955cf..84a14fbff68 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -1188,6 +1188,29 @@ public class GameController implements GameCallback { return player != null ? player.getName() : "-"; } + public String getPingsInfo() { + List usersInfo = new ArrayList<>(); + for (Map.Entry entry : userPlayerMap.entrySet()) { + Optional user = UserManager.instance.getUser(entry.getKey()); + user.ifPresent(u -> usersInfo.add(u.getName() + ": " + u.getPingInfo())); + } + Collections.sort(usersInfo); + usersInfo.add(0, "Players ping:"); + + List watchersinfo = new ArrayList<>(); + for (Map.Entry entry : watchers.entrySet()) { + Optional user = UserManager.instance.getUser(entry.getValue().userId); + user.ifPresent(u -> watchersinfo.add(u.getName() + ": " + u.getPingInfo())); + } + Collections.sort(watchersinfo); + if (watchersinfo.size() > 0) { + watchersinfo.add(0, "Watchers ping:"); + } + + usersInfo.addAll(watchersinfo); + return String.join("
", usersInfo); + } + public String attemptToFixGame() { // try to fix disconnects