示例#1
0
        //获得某个类型的排队
        public QueueLogic GetMatching(QueueRecord tbQueue)
        {
            QueueLogic matching;

            if (!QueueManager.Matchings.TryGetValue(tbQueue.Id, out matching))
            {
                switch ((eQueueType)tbQueue.AppType)
                {
                case eQueueType.Dungeon:
                    matching = new FubenQueue(tbQueue.Id);
                    break;

                case eQueueType.BattleField:
                    matching = new FightQueue(tbQueue.Id);
                    break;

                case eQueueType.ActivityDungeon:
                    matching = new ActivityFubenQueue(tbQueue.Id);
                    break;
                }
                QueueManager.Matchings.Add(tbQueue.Id, matching);
                QueueManager.RefreshMatchRelation();
            }
            return(matching);
        }
        public void DealWithTeamChange(ActivityFubenQueue _this,
                                       TeamChangedType type,
                                       QueueCharacter character,
                                       List <ulong> teamList,
                                       ulong characterId)
        {
            switch (type)
            {
            case TeamChangedType.Request:
                break;

            case TeamChangedType.AcceptRequest:
            case TeamChangedType.AcceptJoin:
            {
                var queueCharacter = QueueManager.GetMatchingCharacter(characterId);
                if (queueCharacter != null)
                {
                    if (queueCharacter.result == null)
                    {
                        QueueManager.Pop(characterId, eLeaveMatchingType.TeamChange);
                    }
                    else
                    {
                        return;
                    }
                }
                QueueManager.PushOneCharacter(characterId, character);
            }
            break;

            case TeamChangedType.Kick:
            case TeamChangedType.Leave:
            {
//characterId离队的情况
                if (character.result == null)
                {
                    var characterData = character.mDatas.Find(data => data.Id == characterId);
                    if (characterData != null)
                    {
                        character.mDatas.Remove(characterData);
                    }
                    else
                    {
                        Logger.Error("Can't find character data for character[{0}]", characterId);
                    }
                    QueueManager.Remove(characterId, eLeaveMatchingType.TeamChange);
                }
            }
            break;

            case TeamChangedType.Disband:
                break;
            }
        }
        //通知匹配成功
        public void MatchOver(ActivityFubenQueue _this)
        {
            foreach (var queueCharacter in _this.mCharacters)
            {
                var result = new QueueResult(_this);
                result.PushOneCharacter(queueCharacter);
                result.StartTrigger();
            }

#if DEBUG
            PlayerLog.WriteLog((int)LogType.QueueMessage, "MatchOver mCharacters.Clear()");
#endif
            _this.mCharacters.Clear();
        }
        public void StartTrigger(ActivityFubenQueue _this)
        {
            if (_this.mTrigger != null)
            {
                Logger.Error("StartTrigger! mTrigger != null");
                return;
            }
            var fubenId = _this.tbQueue.Param;
            var tbFuben = Table.GetFuben(fubenId);

            if (tbFuben == null)
            {
                Logger.Error("StartTrigger! tbFuben == null");
                return;
            }
            var time = Utils.GetNextDungeonOpenTime(tbFuben);

            _this.mTrigger = TeamServerControl.tm.CreateTrigger(time, _this.MatchOver);
        }
 public void Construct(ActivityFubenQueue _this, int queueId)
 {
 }