Exemplo n.º 1
0
        internal static void IncomingBeatmapInfoReply(bBeatmapInfoReply reply)
        {
            try
            {
                lock (BeatmapRequestLock)
                {
                    foreach (Beatmap b in BeatmapInfoRequestList)
                    {
                        b.submissionStatus = SubmissionStatus.NotSubmitted;
                        b.PlayerRank       = Rankings.N;
                    }

                    foreach (bBeatmapInfo bmi in reply.beatmapInfo)
                    {
                        Beatmap b = BeatmapInfoRequestList[bmi.id];

                        if (bmi.checksum != b.BeatmapChecksum)
                        {
                            b.submissionStatus = SubmissionStatus.UpdateAvailable;
                        }
                        else
                        {
                            switch (bmi.ranked)
                            {
                            case 2:
                                b.submissionStatus = SubmissionStatus.Approved;
                                break;

                            case 1:
                                b.submissionStatus = SubmissionStatus.Ranked;
                                break;

                            default:
                                b.submissionStatus = SubmissionStatus.Pending;
                                break;
                            }
                        }

                        b.BeatmapId      = bmi.beatmapId;
                        b.BeatmapSetId   = bmi.beatmapSetId;
                        b.BeatmapTopicId = bmi.threadId;
                        b.PlayerRank     = bmi.playerRank;
                    }

                    BeatmapInfoRequestList = null;
                }
                if (NewBeatmapInfo != null)
                {
                    NewBeatmapInfo(null, null);
                }
            }
            catch (Exception e)
            {
                BanchoClient.HandleException(e, "beatmap info reply");
            }
        }
        internal static void IncomingBeatmapInfoReply(bBeatmapInfoReply reply)
        {
            try
            {
                //Transfer to a local copy.
                List <Beatmap> requestList = BeatmapInfoSendListPartial;
                BeatmapInfoSendListPartial = null;

                long tick = DateTime.Now.Ticks;

                if (requestList == null)
                {
                    return;
                }

                foreach (Beatmap b in requestList)
                {
                    b.SubmissionStatus = SubmissionStatus.NotSubmitted;
                    if (GameBase.User.Name != b.Creator)
                    {
                        b.BeatmapSetId = -1;
                    }
                    b.LastInfoUpdate = tick;
                    b.ClearRankings();
                }

                foreach (bBeatmapInfo bmi in reply.beatmapInfo)
                {
                    Beatmap b = bmi.id >= 0 ? requestList[bmi.id] : GetBeatmapById(bmi.beatmapId);

                    if (b == null)
                    {
                        continue;
                    }

                    if (bmi.checksum != b.BeatmapChecksum)
                    {
                        b.UpdateAvailable = true;
                    }

                    switch (bmi.ranked)
                    {
                    case 3:
                        b.SubmissionStatus = SubmissionStatus.Qualified;
                        break;

                    case 2:
                        b.SubmissionStatus = SubmissionStatus.Approved;
                        break;

                    case 1:
                        b.SubmissionStatus = SubmissionStatus.Ranked;
                        break;

                    default:
                        b.SubmissionStatus = SubmissionStatus.Pending;
                        break;
                    }

                    b.BeatmapId        = bmi.beatmapId;
                    b.BeatmapSetId     = bmi.beatmapSetId;
                    b.BeatmapTopicId   = bmi.threadId;
                    b.PlayerRankOsu    = bmi.osuRank;
                    b.PlayerRankFruits = bmi.fruitsRank;
                    b.PlayerRankTaiko  = bmi.taikoRank;
                    b.PlayerRankMania  = bmi.maniaRank;
                }

                if (NewBeatmapInfo != null)
                {
                    NewBeatmapInfo(null, null);
                }

                getOnlineBeatmapInfoForQueued();
            }
            catch (Exception e)
            {
                ErrorSubmission.Submit(new OsuError(e)
                {
                    Feedback = "beatmap info reply"
                });
            }

            Debug.Print("Received details for " + reply.beatmapInfo.Count + " beatmaps!");
        }