Log packets in dedicated handlers instead of in encoder/decoder
This commit is contained in:
48
src/main/java/net/packet/logging/OutPacketLogger.java
Normal file
48
src/main/java/net/packet/logging/OutPacketLogger.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package net.packet.logging;
|
||||
|
||||
import constants.net.OpcodeConstants;
|
||||
import io.netty.channel.ChannelHandler.Sharable;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.ChannelOutboundHandlerAdapter;
|
||||
import io.netty.channel.ChannelPromise;
|
||||
import net.packet.OutPacket;
|
||||
import net.packet.Packet;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import tools.HexTool;
|
||||
|
||||
@Sharable
|
||||
public class OutPacketLogger extends ChannelOutboundHandlerAdapter implements PacketLogger {
|
||||
private static final Logger log = LoggerFactory.getLogger(OutPacketLogger.class);
|
||||
private static final int LOG_CONTENT_THRESHOLD = 50_000;
|
||||
|
||||
@Override
|
||||
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
|
||||
if (msg instanceof OutPacket packet) {
|
||||
log(packet);
|
||||
}
|
||||
|
||||
ctx.write(msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(Packet packet) {
|
||||
final byte[] content = packet.getBytes();
|
||||
final int packetLength = content.length;
|
||||
|
||||
if (packetLength <= LOG_CONTENT_THRESHOLD) {
|
||||
final short opcode = LoggingUtil.readFirstShort(content);
|
||||
String opcodeHex = Integer.toHexString(opcode).toUpperCase();
|
||||
String opcodeName = getSendOpcodeName(opcode);
|
||||
String prefix = opcodeName == null ? "<UnknownPacket> " : "";
|
||||
log.info("{}ServerSend:{} [{}] ({}) - hex:{} - text:{}", prefix, opcodeName, opcodeHex, packetLength,
|
||||
HexTool.toString(content), HexTool.toStringFromAscii(content));
|
||||
} else {
|
||||
log.info(HexTool.toString(new byte[]{content[0], content[1]}) + " ...");
|
||||
}
|
||||
}
|
||||
|
||||
private String getSendOpcodeName(short opcode) {
|
||||
return OpcodeConstants.sendOpcodeNames.get((int) opcode);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user