예제 #1
0
        private void OnPlayerFinished(object state)
        {
            object[] stateParams        = (object[])state;
            int      currentChallengeID = (int)stateParams[0];
            PlayerFinishEventArgs e     = (PlayerFinishEventArgs)stateParams[1];

            if (e.TimeOrScore > 0)
            {
                uint?oldPosition, newPosition;
                bool newBest;
                RecordAdapter.CheckAndWriteNewRecord(e.Login, currentChallengeID, e.TimeOrScore, out oldPosition, out newPosition, out newBest);

                if (newBest)
                {
                    string nickname = GetNickname(e.Login);

                    if (nickname != null && newPosition <= Settings.MaxRecordsToReport && currentChallengeID == CurrentChallengeID)
                    {
                        DetermineLocalRecords();
                        OnPlayerNewRecord(e.Login, nickname, e.TimeOrScore, oldPosition, newPosition);
                    }
                }

                SessionAdapter.AddSession(e.Login, currentChallengeID, Convert.ToUInt32(e.TimeOrScore));
            }
        }
예제 #2
0
        private void Callbacks_PlayerFinish(object sender, PlayerFinishEventArgs e)
        {
            if (!Settings.ResetOnFinish || e.TimeOrScore <= 0)
            {
                return;
            }

            RunCatchLog(() => ResetValues(e.Login), "Error in Callbacks_PlayerFinish Method.", true);
        }
예제 #3
0
        private void Callbacks_PlayerFinish(object sender, PlayerFinishEventArgs e)
        {
            RunCatchLog(() =>
            {
                if (e.TimeOrScore <= 0)
                {
                    SendEmptyManiaLinkPageToLogin(e.Login, MANIA_LINK_PAGE_ID);
                    return;
                }

                int?diff = GetDiff(e.Login, 0, e.TimeOrScore, true);

                if (diff.HasValue)
                {
                    SendCheckPointUIToLogin(e.Login, diff.Value, 0, true);
                }
            }, "Error in Callbacks_PlayerFinish Method.", true);
        }
예제 #4
0
 private void Callbacks_PlayerFinish(object sender, PlayerFinishEventArgs e)
 {
     RunCatchLog(() => ThreadPool.QueueUserWorkItem(OnPlayerFinished, new object[] { CurrentChallengeID, e }), "Error in Callbacks_PlayerFinish Method.", true);
 }
예제 #5
0
        private void Callbacks_PlayerFinish(object sender, PlayerFinishEventArgs e)
        {
            if (!IsDedimaniaResponsive)
            {
                return;
            }

            RunCatchLog(() =>
            {
                if (e.TimeOrScore > 0)
                {
                    int rankingIndex         = Array.FindIndex(Rankings, rank => rank.Login == e.Login);
                    DedimaniaRanking ranking = rankingIndex == -1 ? null : Rankings[rankingIndex];

                    uint?oldRank    = null;
                    uint?newRank    = null;
                    string nickname = null;

                    if (ranking != null)
                    {
                        if (e.TimeOrScore < ranking.TimeOrScore)
                        {
                            oldRank = (uint)rankingIndex + 1;

                            lock (_rankingModifyLock)
                            {
                                ranking.TimeOrScore = Convert.ToUInt32(e.TimeOrScore);
                                List <DedimaniaRanking> newRankings = new List <DedimaniaRanking>(Rankings);
                                newRankings.Sort(DedimaniaRanking.Comparer);
                                newRank = (uint)newRankings.IndexOf(ranking) + 1;

                                Rankings = newRankings.ToArray();
                            }
                        }
                    }
                    else
                    {
                        nickname = GetNickname(e.Login);

                        if (nickname == null)
                        {
                            return;
                        }

                        lock (_rankingModifyLock)
                        {
                            List <DedimaniaRanking> newRankings = new List <DedimaniaRanking>(Rankings);
                            DedimaniaRanking newRanking         = new DedimaniaRanking(e.Login, nickname, Convert.ToUInt32(e.TimeOrScore), DateTime.Now);
                            newRankings.Add(newRanking);
                            newRankings.Sort(DedimaniaRanking.Comparer);
                            newRank  = Convert.ToUInt32(newRankings.IndexOf(newRanking)) + 1;
                            Rankings = newRankings.ToArray();
                        }
                    }

                    if (newRank.HasValue && newRank <= DedimaniaSettings.MAX_RECORDS_TO_REPORT)
                    {
                        if (newRank == 1)
                        {
                            BestTime = Convert.ToUInt32(e.TimeOrScore);
                        }

                        OnRankingsChanged(Rankings);

                        nickname = nickname ?? GetNickname(e.Login);

                        if (nickname == null)
                        {
                            return;
                        }

                        OnRankChanged(newRank.Value, oldRank, e.Login, nickname, Convert.ToUInt32(e.TimeOrScore));
                    }
                }
            }, "Error in Callbacks_PlayerFinish Method.", true);
        }