Пример #1
0
        public void SendClientQueueSuccess(PlayerConnect _this, QueueType type, ulong characterId)
        {
            var data = new QueueSuccessData();

            data.Type = (int)type;
            switch (type)
            {
            case QueueType.Login:
            {
                LoginServerControlDefaultImpl.NotifyGateClientState(LoginServer.Instance.ServerControl,
                                                                    _this.ClientId, 0, GateClientState.Login);
                data.LastServerId = _this.Player.DbData.LastServerId;

                _this.Player.DbData.LoginDay++;
                _this.Player.DbData.LoginTotal++;
            }
            break;

            case QueueType.EnterGame:
                data.CharacterId = characterId;
                break;
            }

            PlayerLog.WriteLog((int)LogType.SendClientQueueSuccess, "SendClientQueueSuccess type = {0}, name = {1}",
                               type, _this.Name);
            LoginServer.Instance.ServerControl.NotifyQueueSuccess(_this.ClientId, data);
        }
Пример #2
0
        public void PushLoginState(PlayerConnect connect)
        {
            var playerId = connect.Player.DbData.Id;

            if (connect.State != ConnectState.InGame)
            {
                Logger.Warn("PushLoginState state = {0}", connect.State);
                connect.OnLost();
            }
            else
            {
                PlayerConnect oldPlayer;
                if (QueueManager.InGamePlayerList.TryGetValue(playerId, out oldPlayer))
                {
                    if (oldPlayer != null)
                    {
                        LeaverPlayer(oldPlayer);
                    }
                    QueueManager.InGamePlayerList.Remove(playerId);
                }
            }
            connect.State = ConnectState.Landing;
            QueueManager.LandingPlayerList.TryAdd(playerId, connect);
            QueueManager.TotalList.TryAdd(connect.ClientId, connect);
        }
Пример #3
0
 public void DeleteTrigger(PlayerConnect _this)
 {
     if (_this.trigger != null)
     {
         PlayerLog.WriteLog(1111222, "DeleteTrigger-----State:{0}", _this.State);
         LoginServerControl.Timer.DeleteTrigger(_this.trigger);
         _this.trigger = null;
     }
 }
Пример #4
0
 public void StartTrigger(int mins, PlayerConnect _this)
 {
     if (_this.trigger != null)
     {
         LoginServerControl.Timer.ChangeTime(ref _this.trigger, DateTime.Now.AddMinutes(mins));
     }
     else
     {
         _this.trigger = LoginServerControl.Timer.CreateTrigger(DateTime.Now.AddMinutes(mins), _this.TimeOver);
     }
 }
Пример #5
0
        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);
        }
Пример #6
0
        public void EnterPlayer(PlayerConnect pc)
        {
            var serverId = pc.Player.DbData.LastServerId;

            QueueManager.PlayerCount.modifyValue(serverId, 1);
            ++QueueManager.GamePlayerCount;
            //int nowValue;
            //if (QueueManager.PlayerCount.TryGetValue(serverId, out nowValue))
            //{
            //    QueueManager.PlayerCount[serverId] = nowValue + 1;
            //}
        }
Пример #7
0
        public void LeaverPlayer(PlayerConnect pc)
        {
            var serverId = pc.Player.DbData.LastServerId;
            var nowValue = QueueManager.PlayerCount.modifyValue(serverId, -1);

            if (nowValue < 0)
            {
                PlayerLog.WriteLog((ulong)LogType.LoginPlayerQueueCountError, "s={0},c={1}", serverId, nowValue);
                QueueManager.PlayerCount.modifyValue(serverId, 1);
                return;
            }
            --QueueManager.GamePlayerCount;
            //if (QueueManager.PlayerCount.TryGetValue(serverId, out nowValue))
            //{
            //    if (nowValue < 1)
            //    {
            //        PlayerLog.WriteLog((ulong)LogType.LoginPlayerQueueCountError, "s={0},c={1}", serverId, nowValue);
            //        nowValue = 1;
            //    }
            //    QueueManager.PlayerCount[serverId] = nowValue - 1;
            //    --QueueManager.GamePlayerCount;
            //}
        }
Пример #8
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);
        }
Пример #9
0
        public void OnLost(PlayerConnect _this)
        {
            switch (_this.State)
            {
            case ConnectState.Wait:
            {
                QueueManager.TotalList.Remove(_this.ClientId);
                _this.State = ConnectState.WaitOffLine;
                var           key = _this.GetKey();
                PlayerConnect oldKey;
                if (QueueManager.CacheLost.TryGetValue(key, out oldKey))
                {
                    Logger.Warn("PlayerConnet Onlost Same!! key={0},ClientId{1}", key, _this.ClientId);
                    QueueManager.CacheLost[key] = _this;
                }
                else
                {
                    QueueManager.CacheLost.TryAdd(key, _this);
                }
            }
            break;

            case ConnectState.Landing:
            {
                QueueManager.TotalList.Remove(_this.ClientId);
                _this.State = ConnectState.OffLine;
                var key = _this.GetKey();
                QueueManager.CacheLost.TryAdd(key, _this);
                if (_this.Player == null)
                {
                    Logger.Error("PlayerConnect onLost  state is Landing player is null");
                    _this.ClientId = 0;
                    return;
                }
                QueueManager.LandingPlayerList.Remove(_this.Player.DbData.Id);
            }
            break;

            case ConnectState.EnterGame:
            {
                var key = _this.GetKey();
                _this.State = ConnectState.OffLine;
                QueueManager.TotalList.Remove(_this.ClientId);
                QueueManager.CacheLost.TryAdd(key, _this);
                if (_this.Player == null)
                {
                    Logger.Error("PlayerConnect onLost  state is EnterGame player is null");
                    _this.ClientId = 0;
                    return;
                }
                QueueManager.EnterGamePlayerList.Remove(_this.Player.DbData.Id);
            }
            break;

            case ConnectState.InGame:
            {
                _this.State = ConnectState.OffLine;
                var key = _this.GetKey();
                QueueManager.CacheLost.TryAdd(key, _this);
                if (_this.Player == null)
                {
                    Logger.Error("PlayerConnect onLost  state is InGame player is null");
                    _this.ClientId = 0;
                    return;
                }
                PlayerConnect oldPlayer;
                if (QueueManager.InGamePlayerList.TryGetValue(_this.Player.DbData.Id, out oldPlayer))
                {
                    if (oldPlayer != null)
                    {
                        QueueManager.LeaverPlayer(oldPlayer);
                    }
                    QueueManager.InGamePlayerList.Remove(_this.Player.DbData.Id);
                }
            }
            break;

            case ConnectState.OffLine:
            {
                Logger.Error("PlayerConnect onLost  state is OffLine");
            }
            break;

            case ConnectState.WaitReConnet:
            {
                _this.State = ConnectState.OffLine;
                var key = _this.GetKey();
                QueueManager.CacheLost.TryAdd(key, _this);
            }
            break;
            }
            _this.ClientId = 0;
            _this.Player   = null;
        }
Пример #10
0
 public void SendClientQueueIndex(int index, PlayerConnect _this)
 {
     LoginServer.Instance.ServerControl.NotifyQueueIndex(_this.ClientId, index);
 }
Пример #11
0
        public void TimeOver(PlayerConnect _this)
        {
            PlayerLog.WriteLog((int)LogType.PlayerConnect, "TimeOver -----State:{0}", _this.State);
            _this.trigger = null;
            switch (_this.State)
            {
            case ConnectState.Wait:
                break;

            case ConnectState.Landing:
            {
                //todo 选择角色时间太长
                if (_this.Player != null)
                {
                    _this.Player.Kick(_this.ClientId, KickClientType.LoginTimeOut);
                    CoroutineFactory.NewCoroutine(LoginServer.Instance.ServerControl.PlayerLogout, _this.ClientId)
                    .MoveNext();
                }
            }
            break;

            case ConnectState.EnterGame:
            {
                //todo 进入游戏时间太长
                if (_this.Player != null)
                {
                    _this.Player.Kick(_this.ClientId, KickClientType.LoginTimeOut);
                    CoroutineFactory.NewCoroutine(LoginServer.Instance.ServerControl.PlayerLogout, _this.ClientId)
                    .MoveNext();
                }
            }
            break;

            case ConnectState.InGame:
                break;

            case ConnectState.WaitReConnet:
            {
                if (null == _this.Player || null == _this.Player.DbData)
                {
                    _this.ClientId = 0;
                    Logger.Error("PlayerConnect TimeOver WaitReConnet InGame player is null");
                    break;
                }

                //var character = CharacterManager.Instance.GetCharacterControllerFromMemroy(_this.Player.DbData.SelectChar);
                //if (character != null)
                //{
                //    character.LostLine();
                //    CharacterManager.PopServerPlayer(character.mDbData.ServerId);
                //    CoroutineFactory.NewCoroutine(CharacterManager.Instance.RemoveCharacter,
                //        _this.Player.DbData.SelectChar).MoveNext();
                //}

                PlayerLog.PlayerLogger(_this.Player.DbData.Id, "WaitReConnet TimeOver ClientId={0}", _this.ClientId);
                PlayerConnect oldPlayer;
                if (QueueManager.InGamePlayerList.TryGetValue(_this.Player.DbData.Id, out oldPlayer))
                {
                    if (oldPlayer != null)
                    {
                        QueueManager.LeaverPlayer(oldPlayer);
                    }
                    QueueManager.InGamePlayerList.Remove(_this.Player.DbData.Id);
                }

                LoginServerControlDefaultImpl.CleanCharacterData(_this.ClientId, _this.Player.DbData.SelectChar);

                CoroutineFactory.NewCoroutine(LoginServer.Instance.ServerControl.PlayerLogout, _this.ClientId)
                .MoveNext();
            }
            break;

            case ConnectState.OffLine:
                QueueManager.CacheLost.Remove(_this.GetKey());
                break;

            case ConnectState.WaitOffLine:
                QueueManager.CacheLost.Remove(_this.GetKey());
                break;
            }
        }
Пример #12
0
 public static void LeaverPlayer(PlayerConnect pc)
 {
     mImpl.LeaverPlayer(pc);
 }
Пример #13
0
 public static void EnterPlayer(PlayerConnect pc)
 {
     mImpl.EnterPlayer(pc);
 }
Пример #14
0
 public static void PushLoginState(PlayerConnect connect)
 {
     mImpl.PushLoginState(connect);
 }