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); }
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); }
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; } }
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); } }
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); }
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; //} }
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; //} }
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); }
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 SendClientQueueIndex(int index, PlayerConnect _this) { LoginServer.Instance.ServerControl.NotifyQueueIndex(_this.ClientId, index); }
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; } }
public static void LeaverPlayer(PlayerConnect pc) { mImpl.LeaverPlayer(pc); }
public static void EnterPlayer(PlayerConnect pc) { mImpl.EnterPlayer(pc); }
public static void PushLoginState(PlayerConnect connect) { mImpl.PushLoginState(connect); }