Initial import of IC.Rebuild
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user