Example #1
0
 public static DemoPacket CreatePacket(SourceDemo demoRef, PacketFrame frameRef, PacketType packetType)
 {
     return(packetType switch {
         PacketType.SignOn => new SignOn(demoRef, frameRef),
         PacketType.Packet => new Packet(demoRef, frameRef),
         PacketType.SyncTick => new SyncTick(demoRef, frameRef),
         PacketType.ConsoleCmd => new ConsoleCmd(demoRef, frameRef),
         PacketType.UserCmd => new UserCmd(demoRef, frameRef),
         PacketType.DataTables => new DataTables(demoRef, frameRef),
         PacketType.Stop => new Stop(demoRef, frameRef),
         PacketType.StringTables => new StringTables(demoRef, frameRef),
         PacketType.CustomData => new CustomData(demoRef, frameRef),
         _ => throw new NotSupportedException($"unknown or unsupported packet type: {packetType}")
     });
Example #2
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     if ((DemoParseResult & DemoParseResult.DataTooLong) != 0)
     {
         throw new InvalidDataException("data too long");
     }
     // make sure we set the demo settings first
     Header = new DemoHeader(this);
     Header.ParseStream(ref bsr);
     DemoInfo = new DemoInfo(this);
     // it might be worth it to implement updating helper classes with listeners, but it's not a huge deal atm
     StringTablesManager = new StringTablesManager(this);
     ErrorList           = new List <string>();
     DecompressedLookup  = new List <byte[]>();
     Frames    = new List <PacketFrame>();
     StartTick = 0;
     try {
         PacketFrame frame;
         do
         {
             frame = new PacketFrame(this);
             Frames.Add(frame);
             frame.ParseStream(ref bsr);
             _parseProgress?.Report((double)bsr.CurrentBitIndex / bsr.BitLength);
         } while (frame.Type != PacketType.Stop && bsr.BitsRemaining >= 24);                 // would be 32 but the last byte is often cut off
         StartAdjustmentTick ??= 0;
         EndTick = this.FilterForPacket <Packet>().Select(packet => packet.Tick).Where(i => i >= 0).Max();
     }
     catch (Exception e) {
         _exceptionDuringParsing = true;
         Debug.WriteLine($"Exception after parsing {Frames.Count - 1} packets");
         LogError($"Exception after parsing {Frames.Count - 1} packets: {e.Message}");
         throw;
     }
     EndAdjustmentTick ??= EndTick;
     DemoParseResult |= DemoParseResult.Success;
 }
 public CustomData(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef)
 {
 }
 public DataTables(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef)
 {
 }
 public SyncTick(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef)
 {
 }
Example #6
0
 public SignOn(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef)
 {
 }
Example #7
0
 public ConsoleCmd(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef)
 {
 }
 public LiveCoach(Track track)
 {
     LoadedTrackData     = TrackDataContainer.LoadTrack(track);
     LastReceivedPackets = new PacketFrame();
 }
Example #9
0
 protected DemoPacket(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef)
 {
     FrameRef = frameRef;
 }
 public UserCmd(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef)
 {
 }