Packet logging improvements
This commit is contained in:
parent
39c1ac40c0
commit
d0aad34f43
|
@ -49,7 +49,14 @@ public class Client : IDisposable {
|
|||
}
|
||||
|
||||
#if DEBUG
|
||||
PacketUtils.LogPacket(packet, "SEND", Logger);
|
||||
Guid senderId = sender?.Id ?? Id;
|
||||
string senderName = "?";
|
||||
Client? client = Server.FindExistingClient(senderId);
|
||||
if (client is not null) {
|
||||
senderName = client.Name;
|
||||
}
|
||||
|
||||
PacketUtils.LogPacket(packet, $"{senderName} -> (server)");
|
||||
#endif
|
||||
|
||||
await Socket!.SendAsync(memory.Memory[..(Constants.HeaderSize + packet.Size)], SocketFlags.None);
|
||||
|
|
|
@ -68,7 +68,6 @@ float MarioSize(bool is2d) => is2d ? 180 : 160;
|
|||
server.PacketHandler = (c, p) => {
|
||||
switch (p) {
|
||||
case GamePacket gamePacket: {
|
||||
c.Logger.Info($"Got game packet {gamePacket.Stage}->{gamePacket.ScenarioNum}");
|
||||
c.Metadata["scenario"] = gamePacket.ScenarioNum;
|
||||
c.Metadata["2d"] = gamePacket.Is2d;
|
||||
c.Metadata["lastGamePacket"] = gamePacket;
|
||||
|
@ -382,7 +381,7 @@ CommandHandler.RegisterCommand("maxplayers", args => {
|
|||
});
|
||||
|
||||
CommandHandler.RegisterCommand("list",
|
||||
_ => $"List: {string.Join("\n\t", server.Clients.Where(x => x.Connected).Select(x => $"{x.Name} ({x.Id})"))}");
|
||||
_ => $"List: {string.Join("\n ", server.Clients.Where(x => x.Connected).Select(x => $"{x.Name} ({x.Id})"))}");
|
||||
|
||||
CommandHandler.RegisterCommand("flip", args => {
|
||||
const string optionUsage =
|
||||
|
|
|
@ -80,14 +80,19 @@ public class Server {
|
|||
FillPacket(header, packet, memory.Memory);
|
||||
|
||||
#if DEBUG
|
||||
PacketUtils.LogPacket(packet, "BRDC", sender.Logger);
|
||||
Guid senderId = sender?.Id ?? Guid.Empty;
|
||||
string senderName = "?";
|
||||
Client? client = FindExistingClient(senderId);
|
||||
if (client != null)
|
||||
senderName = client.Name;
|
||||
PacketUtils.LogPacket(packet, $"{senderName} -> (all)");
|
||||
#endif
|
||||
await Broadcast(memory, sender);
|
||||
}
|
||||
|
||||
public Task Broadcast<T>(T packet) where T : struct, IPacket {
|
||||
#if DEBUG
|
||||
PacketUtils.LogPacket(packet, "BRDC", Logger);
|
||||
PacketUtils.LogPacket(packet, "BRDC");
|
||||
#endif
|
||||
|
||||
return Task.WhenAll(Clients.Where(c => c.Connected).Select(async client => {
|
||||
|
@ -250,7 +255,7 @@ public class Server {
|
|||
};
|
||||
connectPacket.Serialize(tempBuffer.Memory.Span[Constants.HeaderSize..]);
|
||||
#if DEBUG
|
||||
PacketUtils.LogPacket(connectPacket, "SEND", Logger);
|
||||
PacketUtils.LogPacket(connectPacket, $"{client.Name} -> {other.Name}");
|
||||
#endif
|
||||
await client.Send(tempBuffer.Memory[..(Constants.HeaderSize + connect.Size)], null);
|
||||
if (other.CurrentCostume.HasValue) {
|
||||
|
@ -259,7 +264,7 @@ public class Server {
|
|||
connectHeader.Serialize(tempBuffer.Memory.Span[..Constants.HeaderSize]);
|
||||
other.CurrentCostume.Value.Serialize(tempBuffer.Memory.Span[Constants.HeaderSize..(Constants.HeaderSize + connectHeader.PacketSize)]);
|
||||
#if DEBUG
|
||||
PacketUtils.LogPacket((CostumePacket)other.CurrentCostume, "SEND", Logger);
|
||||
PacketUtils.LogPacket((CostumePacket)other.CurrentCostume, $"{client.Name} -> {other.Name}");
|
||||
#endif
|
||||
await client.Send(tempBuffer.Memory[..(Constants.HeaderSize + connectHeader.PacketSize)], null);
|
||||
}
|
||||
|
@ -269,7 +274,7 @@ public class Server {
|
|||
|
||||
Logger.Info($"Client {client.Name} ({client.Id}/{socket.RemoteEndPoint}) connected.");
|
||||
} else if (header.Id != client.Id && client.Id != Guid.Empty) {
|
||||
throw new Exception($"Client {client.Name} sent packet with invalid client id {header.Id} instead of {client.Id}");
|
||||
throw new Exception($"Client {client.Name} sent packet {header.Type} with invalid client id {header.Id} instead of {client.Id}");
|
||||
}
|
||||
|
||||
if (header.Type == PacketType.Costume) {
|
||||
|
@ -285,7 +290,7 @@ public class Server {
|
|||
packet.Deserialize(memory.Memory.Span[Constants.HeaderSize..(Constants.HeaderSize + packet.Size)]);
|
||||
|
||||
#if DEBUG
|
||||
PacketUtils.LogPacket(packet, "RECV", client.Logger);
|
||||
PacketUtils.LogPacket(packet, $"{FindExistingClient(header.Id)!.Name} -> (server)");
|
||||
#endif
|
||||
|
||||
if (PacketHandler?.Invoke(client, packet) is false) {
|
||||
|
@ -299,7 +304,7 @@ public class Server {
|
|||
|
||||
#if DEBUG
|
||||
if (header.Type is not (PacketType.Player or PacketType.Cap)) {
|
||||
Logger.Debug("[BRDC] last");
|
||||
PacketUtils.LogPacketSame($"{client.Name} -> (all)");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -20,18 +20,28 @@ public static class PacketUtils {
|
|||
return Constants.HeaderSize + Marshal.SizeOf<T>();
|
||||
}
|
||||
|
||||
public static void LogPacket<T>(T packet, string direction, Logger logger) where T : IPacket {
|
||||
public static void LogPacket<T>(T packet, string tag) where T : IPacket {
|
||||
if (packet is PlayerPacket or CapPacket) // These are too spammy
|
||||
return;
|
||||
|
||||
Type packetType = packet.GetType();
|
||||
FieldInfo[] fields = packetType.GetFields();
|
||||
|
||||
logger.Debug($"[{direction}] {packetType.Name} {{");
|
||||
string prefix = $"{{{DateTime.Now}}} Debug";
|
||||
string msg = $"{prefix} [{tag}] {packetType.Name} {{\n";
|
||||
foreach (FieldInfo field in fields)
|
||||
{
|
||||
logger.Debug($"\t{field.Name} = {field.GetValue(packet)}");
|
||||
msg += $"{prefix} {field.Name} = {field.GetValue(packet)}\n";
|
||||
}
|
||||
logger.Debug($"}}");
|
||||
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
Console.Write(msg);
|
||||
}
|
||||
public static void LogPacketSame(string tag) {
|
||||
string prefix = $"{{{DateTime.Now}}} Debug";
|
||||
string msg = $"{prefix} [{tag}] {{same}}\n";
|
||||
|
||||
Console.ForegroundColor = ConsoleColor.White;
|
||||
Console.Write(msg);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue