Encapsulate "monitored" collection

This commit is contained in:
P0nk
2021-12-21 21:19:54 +01:00
parent 6c1a9465c0
commit 75a9a9718d
3 changed files with 31 additions and 15 deletions

View File

@@ -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));
}

View File

@@ -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.");
}
}
}

View File

@@ -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<Integer> monitored = new HashSet<>();
private static final Set<Integer> monitoredChrIds = new HashSet<>();
public static final Set<Integer> 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<Integer> 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);