private void Callbacks_EndRace(object sender, EndRaceEventArgs e) { RunCatchLog(() => { if (e.Rankings.Count > 0) { // this may take a while, so run it async on the thread pool ThreadPool.QueueUserWorkItem(UpdateRankingForChallenge, e.Challenge.UId); } if (e.Rankings.Count > 1) { // there must be at least 2 players to increase the wins for the first player if (e.Rankings[0].BestTime > 0) { uint wins = PlayerAdapter.IncreaseWins(e.Rankings[0].Login); OnPlayerWins(e.Rankings[0], wins); int maxRank = e.Rankings.Max(playerRank => playerRank.Rank); foreach (PlayerRank playerRank in e.Rankings) { if (playerRank.Rank <= 0) { continue; } if (!CheckpointsValid(playerRank.BestCheckpoints)) { HandleCheater(playerRank.Login, false); } else { PositionAdapter.AddPosition(playerRank.Login, e.Challenge.UId, Convert.ToUInt16(playerRank.Rank), Convert.ToUInt16(maxRank)); } } } } }, "Error in Callbacks_EndRace Method.", true); }