public PlayerConnect IsCache(string type, ulong clientId, string name)
        {
            var           key = PlayerConnect.GetLandingKey(type, name);
            PlayerConnect findConnect;

            if (QueueManager.CacheLost.TryGetValue(key, out findConnect))
            {
                return(findConnect);
            }
            return(null);
        }
Exemple #2
0
        public PlayerQueueType PushConnect(QueueBase _this,
                                           string type,
                                           ulong clientId,
                                           string name,
                                           PlayerController playerController)
        {
            //是否曾经在排队过程中
            PlayerConnect findConnect;
            var           key = PlayerConnect.GetLandingKey(type, name);

            if (QueueManager.CacheLost.TryGetValue(key, out findConnect))
            {
                findConnect.IsOnline = true;
                QueueManager.CacheLost.Remove(key);
                findConnect.ClientId     = clientId;
                playerController.Connect = findConnect;
                switch (findConnect.State)
                {
                case ConnectState.Wait:
                //QueueManager.TotalList.TryAdd(clientId, findConnect);
                //break;
                case ConnectState.Landing:
                case ConnectState.EnterGame:
                case ConnectState.InGame:
                    Logger.Warn("PushConnect StateERROR clientId={0},name={1},State={2}", clientId, name,
                                findConnect.State);
                    break;

                case ConnectState.OffLine:
                {
                    var checkState = _this.CheckQueueState();
                    QueueManager.TotalList.TryAdd(clientId, findConnect);
                    findConnect.Player = playerController;
                    if (checkState == PlayerQueueType.NoWait)
                    {
                        findConnect.State = ConnectState.Landing;
                        QueueManager.LandingPlayerList.TryAdd(playerController.DbData.Id, findConnect);
                        return(PlayerQueueType.NoWait);
                    }
                    findConnect.State = ConnectState.Wait;
                    _this.WaitPlayerList.AddFirst(findConnect);
                }
                break;

                case ConnectState.WaitOffLine:
                {
                    var checkState = _this.CheckQueueState();
                    QueueManager.TotalList.TryAdd(clientId, findConnect);
                    findConnect.Player = playerController;
                    if (checkState == PlayerQueueType.NoWait)
                    {
                        findConnect.State = ConnectState.Landing;
                        QueueManager.LandingPlayerList.TryAdd(playerController.DbData.Id, findConnect);
                        return(PlayerQueueType.NoWait);
                    }
                    findConnect.State = ConnectState.Wait;
                }
                break;
                }
                return(PlayerQueueType.Wait);
            }
            //增加到新的排队
            QueueManager.TotalList.TryGetValue(clientId, out findConnect);
            var check = _this.CheckQueueState();

            switch (check)
            {
            case PlayerQueueType.NoWait:
            {
                if (findConnect == null)
                {
                    findConnect = new PlayerConnect(type, clientId, name, ConnectState.Landing);
                    QueueManager.TotalList.TryAdd(clientId, findConnect);
                }
                playerController.Connect = findConnect;
                findConnect.Player       = playerController;
                QueueManager.LandingPlayerList.TryAdd(findConnect.Player.DbData.Id, findConnect);
            }
            break;

            case PlayerQueueType.Wait:
            {
                if (findConnect == null)
                {
                    findConnect = new PlayerConnect(type, clientId, name);
                    QueueManager.TotalList.TryAdd(clientId, findConnect);
                }
                playerController.Connect = findConnect;
                findConnect.Player       = playerController;
                _this.WaitPlayerList.AddLast(findConnect);
            }
            break;

            case PlayerQueueType.More:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(check);
        }