#ifndef __INC_METIN_II_GAME_DESC_MANAGER_H__ #define __INC_METIN_II_GAME_DESC_MANAGER_H__ #include #include "common/stl.h" #include "common/length.h" class CLoginKey; class DESC_MANAGER : public singleton { public: typedef std::unordered_set DESC_SET; typedef std::unordered_set CLIENT_DESC_SET; typedef std::map DESC_HANDLE_MAP; typedef std::map DESC_ACCOUNTID_MAP; typedef std::unordered_map DESC_LOGINNAME_MAP; typedef std::map DESC_HANDLE_RANDOM_KEY_MAP; public: DESC_MANAGER(); virtual ~DESC_MANAGER(); void Initialize(); void Destroy(); LPDESC AcceptDesc(LPFDWATCH fdw, socket_t s); LPDESC AcceptP2PDesc(LPFDWATCH fdw, socket_t s); void DestroyDesc(LPDESC d, bool erase_from_set = true); LPCLIENT_DESC CreateConnectionDesc(LPFDWATCH fdw, const char * host, WORD port, int iPhaseWhenSucceed, bool bRetryWhenClosed); void TryConnect(); LPDESC FindByHandle(DWORD handle); LPDESC FindByCharacterName(const char* name); LPDESC FindByLoginName(const std::string& login); void ConnectAccount(const std::string& login, LPDESC d); void DisconnectAccount(const std::string& login); void DestroyClosed(); void UpdateLocalUserCount(); DWORD GetLocalUserCount() { return m_iLocalUserCount; } void GetUserCount(int & iTotal, int ** paiEmpireUserCount, int & iLocalCount); const DESC_SET & GetClientSet(); DWORD MakeRandomKey(DWORD dwHandle); bool GetRandomKey(DWORD dwHandle, DWORD* prandom_key); DWORD CreateLoginKey(LPDESC d); LPDESC FindByLoginKey(DWORD dwKey); void ProcessExpiredLoginKey(); bool IsDisconnectInvalidCRC() { return m_bDisconnectInvalidCRC; } void SetDisconnectInvalidCRCMode(bool bMode) { m_bDisconnectInvalidCRC = bMode; } bool IsP2PDescExist(const char * szHost, WORD wPort); private: bool m_bDisconnectInvalidCRC; DESC_HANDLE_RANDOM_KEY_MAP m_map_handle_random_key; CLIENT_DESC_SET m_set_pkClientDesc; DESC_SET m_set_pkDesc; DESC_HANDLE_MAP m_map_handle; //DESC_ACCOUNTID_MAP m_AccountIDMap; DESC_LOGINNAME_MAP m_map_loginName; std::map m_map_pkLoginKey; int m_iSocketsConnected; int m_iHandleCount; int m_iLocalUserCount; int m_aiEmpireUserCount[EMPIRE_MAX_NUM]; bool m_bDestroyed; }; #endif