public void Update(DemoParseResult result) { if (!LastSplitDone()) { //regular split if (result.MapName == GetCurrentSplit().Map) { Split(result); if (OnSplit != null) { OnSplit(this, null); } return; } } if (!AtFirstSplit()) { //resplit if you died and continued if (result.MapName == GetPreviousSplit().Map) { Resplit(result); if (OnResplit != null) { OnResplit(this, null); } } } }
public SourceDemo(FileInfo file, IProgress <double>?parseProgress = null) : base(null) { if (file.Length > BitStreamReader.MaxDataSize) { DemoParseResult |= DemoParseResult.DataTooLong; } else { _parseProgress = parseProgress; FileName = file.Name; _privateReader = new BitStreamReader(File.ReadAllBytes(file.FullName)); } }
public SourceDemo(byte[] data, IProgress <double>?parseProgress = null, string demoName = "") : base(null) { if (data.Length > BitStreamReader.MaxDataSize) { DemoParseResult |= DemoParseResult.DataTooLong; } else { _parseProgress = parseProgress; FileName = demoName; _privateReader = new BitStreamReader(data); } }
public override DemoParseResult GetResult() { var demoParseResult = new DemoParseResult { FileName = FileName, MapName = Map, PlayerName = PlayerName, GameDir = GameDir, TotalTicks = CurrentTick, StartAdjustmentType = MapStartAdjustType, EndAdjustmentType = MapEndAdjustType }; return(demoParseResult); }
public void Split(DemoParseResult result) { GetCurrentSplit().InitializeLiveTicks(TotalTicks); GetCurrentSplit().Update(result); if (GetCurrentSplit().IsBest() && OnBest != null) { OnBest(this, null); } if (IsPersonalBest() && OnPersonalBest != null) { OnPersonalBest(this, null); } TotalTicks += result.AdjustedTicks; CurrentSplitIndex++; }
private void MonitorDemo(BackgroundWorker worker, string demo) { Thread.Sleep(DIRECTORY_SCANNER_REFRESH_RATE); while (!worker.CancellationPending) { try { DemoParseResult demoParseResult = DemoParser.ParseDemo(demo); worker.ReportProgress(0, demoParseResult); return; } catch { //demo still being written to } Thread.Sleep(DIRECTORY_SCANNER_REFRESH_RATE); } }
private void DirectoryScannerWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (Run != null) { if (e.UserState == null) { Run.CurrentDemo = null; } else if (e.UserState is string) { string demo = ((string)e.UserState); Run.CurrentDemo = demo; } else if (e.UserState is DemoParseResult) { DemoParseResult demoParseResult = ((DemoParseResult)e.UserState); Run.Update(demoParseResult); } RunView.UpdateComponent(); } }
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 void Resplit(DemoParseResult result) { TotalTicks += result.AdjustedTicks; GetPreviousSplit().Update(result); }
public void Update(DemoParseResult result) { LiveSegment += result.AdjustedTicks; LiveTicks += result.AdjustedTicks; }