private static void ProcessBattle(SpringBattle battle, PendingDebriefing debriefing = null) { lock (processingLock) { if (debriefing != null) { var cat = ratingCategories.Where(c => IsCategory(battle, c)); if (cat.Any()) { whr[cat.First()].AttachResultReporting(battle.SpringBattleID, debriefing); } else { debriefing.debriefingConsumer.Invoke(debriefing.partialDebriefing); } } int battleID = -1; try { battleID = battle.SpringBattleID; if (processedBattles.Contains(battleID)) { return; } processedBattles.Add(battleID); ratingCategories.Where(c => IsCategory(battle, c)).ForEach(c => whr[c].ProcessBattle(battle)); latestBattle = battleID; } catch (Exception ex) { Trace.TraceError("WHR: Error processing battle (B" + battleID + ")" + ex); } } }
public void AttachResultReporting(int battleID, PendingDebriefing debriefing) { futureDebriefings.TryAdd(battleID, debriefing); }
//Processes new SpringBattle and determines applicable ratings public static void ProcessResult(SpringBattle battle, SpringBattleContext result, PendingDebriefing partialDebriefing) { if (!Initialized) { return; } FillApplicableRatings(battle, result); ProcessBattle(battle, debriefing: partialDebriefing); }