public void Process() { #region detect demos string[] demos; demos = System.IO.Directory.GetFiles(System.Environment.CurrentDirectory + "/" + TARGET_FOLDER + "/", "*.dem", System.IO.SearchOption.AllDirectories); Debug.Success("Found {0} demo files", demos.Count()); for (int i = 0; i < demos.Count();) { // KB MB Debug.Blue("{0} - {1}mb\t", Path.GetFileName(demos[i]), new FileInfo(demos[i]).Length / 1024 / 1024); i++; if (i % 3 == 0) { Console.Write("\n"); } } Console.Write("\n\n"); Debug.Info("Press enter to start processing"); Console.ReadLine(); #endregion #region collect match structure //Doing the processing Dictionary <int, string> matches = new Dictionary <int, string>(); int mId = 0; foreach (string mPath in demos) { matches.Add(mId, demos[mId]); mId++; } #endregion #region process all demos //Now for each demo foreach (int matchID in matches.Keys) { //Debug.Log("Starting processing match id {0}, demo: {1}", matchID, Path.GetFileName(demos[matchID])); Debug.progressBar(matchID + "/" + demos.Count() + " | " + Path.GetFileName(demos[matchID]), 0); Dictionary <int, long> playerLookups = new Dictionary <int, long>(); //Set up recorder settings RecorderSettings rs = new RecorderSettings(); rs.matchID = matchID; rs.playerLookups = playerLookups; currentRS = rs; //Create the parser DemoParser dp = new DemoParser(File.OpenRead(matches[matchID])); dp.ParseHeader(); //Trigger subscription event EventSubscription?.Invoke(new EventSubscriptionEventArgs(dp)); //Hard coded necessary event handlers --------------------------------------------------- dp.PlayerBind += (object sender, PlayerBindEventArgs e) => { if (!playerLookups.ContainsKey(e.Player.EntityID)) { if (e.Player.SteamID != 0) { playerLookups.Add(e.Player.EntityID, e.Player.SteamID); } } }; int tickCounter = 0; dp.TickDone += (object sender, TickDoneEventArgs e) => { tickCounter++; if (tickCounter > 1000) { tickCounter = 0; Debug.updateProgressBar((int)(dp.ParsingProgess * 100)); } }; // ------------------------------------------------------------------------------------- //End of event handlers try { dp.ParseToEnd(); } catch { Debug.exitProgressBar(); Debug.Error("Attempted to read past end of stream..."); } dp.Dispose(); Debug.exitProgressBar(); } #endregion Debug.Success("Complete!!!"); }