Beispiel #1
0
        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);
                    }
                }
            }
        }
Beispiel #2
0
 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));
     }
 }
Beispiel #3
0
 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);
        }
Beispiel #5
0
        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++;
        }
Beispiel #6
0
 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);
     }
 }
Beispiel #7
0
 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();
     }
 }
Beispiel #8
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;
 }
Beispiel #9
0
 public void Resplit(DemoParseResult result)
 {
     TotalTicks += result.AdjustedTicks;
     GetPreviousSplit().Update(result);
 }
Beispiel #10
0
 public void Update(DemoParseResult result)
 {
     LiveSegment += result.AdjustedTicks;
     LiveTicks   += result.AdjustedTicks;
 }