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}") });
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) { }
public SignOn(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef) { }
public ConsoleCmd(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef) { }
public LiveCoach(Track track) { LoadedTrackData = TrackDataContainer.LoadTrack(track); LastReceivedPackets = new PacketFrame(); }
protected DemoPacket(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef) { FrameRef = frameRef; }
public UserCmd(SourceDemo?demoRef, PacketFrame frameRef) : base(demoRef, frameRef) { }