public LoginWaitLogic() { for (LoginWaitLogic.UserType i = LoginWaitLogic.UserType.Normal; i < LoginWaitLogic.UserType.Max_Type; i++) { this.m_UserList[(int)i] = new List <LoginWaitLogic.UserInfo>(); } }
public LoginWaitLogic.UserType GetUserType(string userID) { LoginWaitLogic.UserType userType = LoginWaitLogic.UserType.Normal; try { if (VIPEumValue.VIP_MIN_NEED_REALMONEY <= 0) { int moneyToYuanBao = GameManager.GameConfigMgr.GetGameConfigItemInt("money-to-yuanbao", 10); if (moneyToYuanBao > 0) { VIPEumValue.VIP_MIN_NEED_REALMONEY = VIPEumValue.VIP_MIN_NEED_EXP / moneyToYuanBao; } } if (GameManager.ClientMgr.QueryTotaoChongZhiMoney(userID, -1, -1) >= VIPEumValue.VIP_MIN_NEED_REALMONEY) { userType = LoginWaitLogic.UserType.Vip; } } catch (Exception ex) { DataHelper.WriteExceptionLogEx(ex, "LoginWaitLogic::GetUserType Exception!!!"); return(userType); } return(userType); }
public void OutWaitInfo(LoginWaitLogic.UserType userType, int index) { try { lock (this.m_Mutex) { if (index < 0 || index >= this.GetWaitingCount(userType)) { LogManager.WriteLog(LogTypes.Error, string.Format("OutWaitInfo Index Was Outside ", new object[0]), null, true); } else { LoginWaitLogic.UserInfo userInfo = this.m_UserList[(int)userType][index]; LogManager.WriteLog(LogTypes.Error, string.Format("OutWaitInfo:userID={0} zoneID={1} startTick={2} updateTick={3} firstTick={4} overTick={5}", new object[] { userInfo.userID, userInfo.zoneID, userInfo.startTick, userInfo.updateTick, userInfo.firstTick, userInfo.overTick }), null, true); } } } catch (Exception ex) { DataHelper.WriteExceptionLogEx(ex, string.Format("LoginWaitLogic::PopTopWaiting", new object[0])); } }
public bool AddToWait(string userID, int zoneID, LoginWaitLogic.UserType userType, TMSKSocket socket) { try { lock (this.m_Mutex) { if (this.IsInWait(userID)) { return(false); } if (this.GetWaitingCount(userType) >= this.GetConfig(userType, LoginWaitLogic.ConfigType.MaxQueueNum)) { return(false); } this.m_UserList[(int)userType].Add(new LoginWaitLogic.UserInfo { userID = userID, zoneID = zoneID, socket = socket, startTick = TimeUtil.NOW(), updateTick = 0L }); this.m_User2SocketDict.Add(userID, socket); } } catch (Exception ex) { DataHelper.WriteExceptionLogEx(ex, string.Format("LoginWaitLogic::AddToWait userID={0}", userID)); return(false); } return(true); }
public int GetWaitingCount(LoginWaitLogic.UserType userType) { int count; lock (this.m_Mutex) { count = this.m_UserList[(int)userType].Count; } return(count); }
public int GetConfig(LoginWaitLogic.UserType userType, LoginWaitLogic.ConfigType type) { int result; if (userType < LoginWaitLogic.UserType.Normal || userType >= LoginWaitLogic.UserType.Max_Type) { result = 0; } else if (type < LoginWaitLogic.ConfigType.NeedWaitNum || type >= (LoginWaitLogic.ConfigType) this.m_IntConfig[(int)userType].Length) { result = 0; } else { result = this.m_IntConfig[(int)userType][(int)type]; } return(result); }
public LoginWaitLogic.UserInfo TopWaiting(LoginWaitLogic.UserType userType) { LoginWaitLogic.UserInfo userInfo = null; try { lock (this.m_Mutex) { if (this.GetWaitingCount(userType) <= 0) { return(null); } userInfo = this.m_UserList[(int)userType][0]; } } catch (Exception ex) { DataHelper.WriteExceptionLogEx(ex, string.Format("LoginWaitLogic::TopWaiting", new object[0])); } return(userInfo); }
public void ProcessWaitingList(LoginWaitLogic.UserType userType) { try { long currTick = TimeUtil.NOW(); if (this.GetWaitingCount(userType) > 0) { int currClientCount = this.GetUserCount(); lock (this.m_Mutex) { int i = 0; long lastOverTick = 0L; long firstWaitSeconds = 0L; foreach (LoginWaitLogic.UserInfo userInfo in this.m_UserList[(int)userType]) { i++; if (1 == i && 0L == userInfo.firstTick) { userInfo.firstTick = TimeUtil.NOW(); } long leftSeconds; if (currClientCount + i <= this.GetConfig(userType, LoginWaitLogic.ConfigType.MaxServerNum)) { if (0L == userInfo.overTick) { userInfo.overTick = ((0L == lastOverTick) ? currTick : lastOverTick) + (long)this.GetConfig(userType, LoginWaitLogic.ConfigType.WaitUpdateInt); } leftSeconds = Global.GMax(1L, (userInfo.overTick - currTick) / 1000L); leftSeconds = Global.GMin(leftSeconds, (long)(this.GetConfig(userType, LoginWaitLogic.ConfigType.WaitUpdateInt) / 1000 * i)); lastOverTick = userInfo.overTick; } else if (1 == i) { leftSeconds = Global.GMax(this.m_LastEnterFromFirstSecs, (TimeUtil.NOW() - userInfo.firstTick) / 1000L); leftSeconds = Global.GMax(1L, leftSeconds); firstWaitSeconds = leftSeconds; } else { leftSeconds = (long)i * firstWaitSeconds; } if (currTick - userInfo.updateTick <= (long)this.m_UserUpdateInt) { lastOverTick = userInfo.overTick; } else { userInfo.updateTick = currTick; this.NotifyWaitingInfo(userInfo, i, leftSeconds); } } } if (currClientCount < this.GetConfig(userType, LoginWaitLogic.ConfigType.NeedWaitNum)) { for (int i = 0; i < 5; i++) { LoginWaitLogic.UserInfo userInfo = this.PopTopWaiting(userType); if (null != userInfo) { this.NotifyUserEnter(userInfo); } } } else if (currClientCount < this.GetConfig(userType, LoginWaitLogic.ConfigType.MaxServerNum)) { LoginWaitLogic.UserInfo userInfo = this.TopWaiting(userType); if (null != userInfo) { if (userInfo.overTick > 0L) { if (currTick >= userInfo.overTick) { userInfo = this.PopTopWaiting(userType); this.NotifyUserEnter(userInfo); } } } } } } catch (Exception ex) { DataHelper.WriteExceptionLogEx(ex, string.Format("LoginWaitLogic::Tick", new object[0])); } }