Exemple #1
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;
        }
Exemple #2
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;
            }
        }