diff --git a/src/main/java/client/command/commands/gm3/MonitorCommand.java b/src/main/java/client/command/commands/gm3/MonitorCommand.java index a641f53bc8..7b13819252 100644 --- a/src/main/java/client/command/commands/gm3/MonitorCommand.java +++ b/src/main/java/client/command/commands/gm3/MonitorCommand.java @@ -32,7 +32,7 @@ import tools.PacketCreator; public class MonitorCommand extends Command { { - setDescription("Toggle logging the packets of a player."); + setDescription("Toggle monitored packet logging of a character."); } @Override @@ -47,14 +47,9 @@ public class MonitorCommand extends Command { player.message("Player '" + params[0] + "' could not be found on this world."); return; } - boolean monitored = MonitoredChrLogger.monitored.contains(victim.getId()); - if (monitored) { - MonitoredChrLogger.monitored.remove(victim.getId()); - } else { - MonitoredChrLogger.monitored.add(victim.getId()); - } - player.yellowMessage(victim.getId() + " is " + (!monitored ? "now being monitored." : "no longer being monitored.")); - String message = player.getName() + (!monitored ? " has started monitoring " : " has stopped monitoring ") + victim.getId() + "."; + boolean monitored = MonitoredChrLogger.toggleMonitored(victim.getId()); + player.yellowMessage(victim.getId() + " is " + (monitored ? "now being monitored." : "no longer being monitored.")); + String message = player.getName() + (monitored ? " has started monitoring " : " has stopped monitoring ") + victim.getId() + "."; Server.getInstance().broadcastGMMessage(c.getWorld(), PacketCreator.serverNotice(5, message)); } diff --git a/src/main/java/client/command/commands/gm3/MonitorsCommand.java b/src/main/java/client/command/commands/gm3/MonitorsCommand.java index de18a281c7..841433a7c7 100644 --- a/src/main/java/client/command/commands/gm3/MonitorsCommand.java +++ b/src/main/java/client/command/commands/gm3/MonitorsCommand.java @@ -30,14 +30,14 @@ import net.packet.logging.MonitoredChrLogger; public class MonitorsCommand extends Command { { - setDescription("Show all players having their packets logged."); + setDescription("Show all characters being monitored for packet logging"); } @Override public void execute(Client c, String[] params) { Character player = c.getPlayer(); - for (Integer cid : MonitoredChrLogger.monitored) { - player.yellowMessage(Character.getNameById(cid) + " is being monitored."); + for (int chrId : MonitoredChrLogger.getMonitoredChrIds()) { + player.yellowMessage(Character.getNameById(chrId) + " is being monitored."); } } } diff --git a/src/main/java/net/packet/logging/MonitoredChrLogger.java b/src/main/java/net/packet/logging/MonitoredChrLogger.java index 52e8e02ca2..153e6a9b94 100644 --- a/src/main/java/net/packet/logging/MonitoredChrLogger.java +++ b/src/main/java/net/packet/logging/MonitoredChrLogger.java @@ -22,12 +22,14 @@ package net.packet.logging; import client.Character; import client.Client; +import net.jcip.annotations.NotThreadSafe; import net.opcodes.RecvOpcode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tools.HexTool; import java.util.Arrays; +import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -36,18 +38,37 @@ import java.util.Set; * * @author Alan (SharpAceX) */ - +@NotThreadSafe public class MonitoredChrLogger { private static final Logger log = LoggerFactory.getLogger(MonitoredChrLogger.class); - public static final Set monitored = new HashSet<>(); + private static final Set monitoredChrIds = new HashSet<>(); public static final Set ignored = new HashSet<>(); + /** + * Toggle monitored status for a character id + * + * @return new status. true if the chrId is now monitored, otherwise false. + */ + public static boolean toggleMonitored(int chrId) { + if (monitoredChrIds.contains(chrId)) { + monitoredChrIds.remove(chrId); + return false; + } else { + monitoredChrIds.add(chrId); + return true; + } + } + + public static Collection getMonitoredChrIds() { + return monitoredChrIds; + } + public static void logPacketIfMonitored(Client c, short packetId, byte[] packetContent) { Character chr = c.getPlayer(); if (chr == null) { return; } - if (!monitored.contains(chr.getId())) { + if (!monitoredChrIds.contains(chr.getId())) { return; } RecvOpcode op = getOpcodeFromValue(packetId);