Files
IC.Rebuild/Core/PacketRecorder.cs
T

21 lines
1.0 KiB
C#

namespace ICRebuild.Core;
// One consumer of the manager. Pausing and filtering affect only this log.
public sealed class PacketRecorder(PacketBuffer buffer)
{
private long completeUp,completeDown,metadataOnly;
public long CompleteUp => Interlocked.Read(ref completeUp);
public long CompleteDown => Interlocked.Read(ref completeDown);
public long MetadataOnly => Interlocked.Read(ref metadataOnly);
public void Record(NetworkObservation observation)
{
if(observation.Phase==NetworkPhase.AfterSend) return; // One record per message.
var packet=observation.Message;
if(!buffer.Add(packet.Direction,packet.Opcode,packet.GameVersion,null,packet.Target,packet.Payload,
packet.Complete,packet.Issue,observation.Context,packet.MonotonicTicks,packet.Time)) return;
if(!packet.Complete) Interlocked.Increment(ref metadataOnly);
else if(packet.Direction==PacketDirection.Up) Interlocked.Increment(ref completeUp);
else Interlocked.Increment(ref completeDown);
}
}