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; }
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; } }