21 lines
1.0 KiB
C#
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);
|
|
}
|
|
}
|