Ejemplo n.º 1
0
 public LoginWaitLogic()
 {
     for (LoginWaitLogic.UserType i = LoginWaitLogic.UserType.Normal; i < LoginWaitLogic.UserType.Max_Type; i++)
     {
         this.m_UserList[(int)i] = new List <LoginWaitLogic.UserInfo>();
     }
 }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
 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]));
     }
 }
Ejemplo n.º 4
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);
 }
Ejemplo n.º 5
0
        public int GetWaitingCount(LoginWaitLogic.UserType userType)
        {
            int count;

            lock (this.m_Mutex)
            {
                count = this.m_UserList[(int)userType].Count;
            }
            return(count);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
 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);
 }
Ejemplo n.º 8
0
 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]));
     }
 }