#pragma once const int DISTRIBUTE_OUT_TABLE = 6; struct _WAITUSER { int nServerID; //´ë±âÁßÀ¸·Î ¿¬°áµÇ¾î ÀÖ´Â ·Î±×Àμ­¹öÀÇ ¾ÆÀ̵ð UINT nAccountDBID; //´ë±âÇÏ´Â ³ðÀÇ ¾îÄ«¿îÆ®µðºñ¾ÆÀ̵ð ULONG nAddTimeTick; //´ë±â½ÃÀÛÇÑ ½Ã°£ //need update USHORT nWaitTicketNum; //ƼÄϳѹö ´ç½ÅÀÌ ¸î¹øÂ° ¼±¼öÀÎÁö _WAITUSER() { nServerID = 0; nAccountDBID = 0; nAddTimeTick = 0; nWaitTicketNum = 0; } }; class CDNWaitUserManager { public: CDNWaitUserManager(); ~CDNWaitUserManager(); bool Initialize(int nMaxuser); void UpdateCurCount(UINT nCurCount); bool IsWaitUser(UINT nAccountDBID); int AddWaitUser(int nServerID, UINT nAccountDBID, USHORT &nLeftTicketNum, USHORT &nLastEstimateCalcTime); void DelWaitUser(int nServerID, UINT nAccountDBID); //Calc Estimate Waiting Time UINT GetWaitUserCount(); UINT GetWorldMaxUser() { return m_nWorldMaxUser; } USHORT CalcEstimateTime(UINT nLeftWaitUser, UINT nWorldUserCount); private: CSyncLock m_Sync; std::list <_WAITUSER> m_WaitUserList; UINT m_nWorldMaxUser; UINT m_nWorldPreCurUser; UINT m_nWorldCurUser; void WaitUserProcessAsync(UINT nCurCnt); std::vector > m_OutList; //first index, second outcount; void UpdateProcessIndexAsync(int nIndex, int nCount); }; extern CDNWaitUserManager * g_pWaitUserManager;