private void PermutationReady(GameList allGames, List <int> allWinners, List <TeamResult> teamResults, int completedPermutations, double totalPermutations) { TotalCalculations = totalPermutations; mUpdateCounter++; if (mUpdateCounter > totalPermutations / 100) { Console.WriteLine($"{(int)Math.Round(completedPermutations / totalPermutations * 100)}% done permuting"); mUpdateCounter = 0; } //Check for final callback (signaled by homeWinners == null) if (allWinners == null) { //Wait for the judge to catch up if (mJudge != null) { mJudge.FinishSession((a, b) => { Finish(mFinishedCallback); }); } else { Finish(mFinishedCallback); } return; } if (mJudge != null) { //Throttle so we don't overload the judge while (mJudge.Backlog > 1000000) { Thread.Sleep(TimeSpan.FromMilliseconds(100)); } //Determine who won the permutation (async) mJudge.Judge(allWinners, teamResults); } else { DivisionResult result = DivisionWinnerCalculator.JudgeSync(mGames, mDivision, TeamIds, allWinners, teamResults); JudgmentReady(result.WinnerId, result.DivisionFinalistIds, result.Milliseconds, allWinners); } }
private DivisionScenarioAnalyzer(League league, string conferenceName, string divisionName, string teamName, bool fastMode, Action <long, double, TimeSpan> progressCallback, Action <List <string>, TimeSpan> finishedCallback) { mLeague = league; mTeam = teamName != null?league.FindTeam(teamName) : null; mProgressCallback = progressCallback; mFinishedCallback = finishedCallback; ScenariosCalculated = new List <int> { 0, 0, 0 }; ScenarioTimes = new List <double> { 0, 0, 0 }; mDivision = league.FindDivision(conferenceName, divisionName); //Prepare the list of team Ids and division winner counts TeamIds = Team.GetTeamIds(mDivision.Teams); WinnerCounts = new Dictionary <int, int>(); TieCounts = new Dictionary <int, int>(); lock (WinnerCounts) { foreach (int teamId in TeamIds) { //Entries for outright winner, 1/2/3/etc.-way tie-breakers, and no-win ties WinnerCounts.Add(teamId, 0); TieCounts.Add(teamId, 0); } } //Get all games involving division teams mGames = mDivision.AllGames; if (fastMode) { mJudge = new DivisionWinnerCalculator(league, mDivision, mGames, JudgmentReady); } //Explore every permutation of game scenarios GamePermutator.PermutateGames(mGames, PermutationReady); }