#ifndef P2P_MANAGER_H_ #define P2P_MANAGER_H_ #include #include "input.h" #include typedef struct _CCI { char szName[CHARACTER_NAME_MAX_LEN + 1]; DWORD dwPID; BYTE bEmpire; int lMapIndex; BYTE bChannel; LPDESC pkDesc; } CCI; class P2P_MANAGER : public singleton { public: P2P_MANAGER(); ~P2P_MANAGER(); // ¾Æ·¡ Register* Unregister* pairµéÀº ³»ºÎÀûÀ¸·Î »ç½Ç °°Àº ·çƾÀ» »ç¿ëÇÑ´Ù. // ´ÜÁö ¸í½ÃÀûÀ¸·Î Ç¥½ÃÇϱâ À§ÇÑ °Í void RegisterAcceptor(LPDESC d); void UnregisterAcceptor(LPDESC d); void RegisterConnector(LPDESC d); void UnregisterConnector(LPDESC d); void EraseUserByDesc(LPDESC d); // ÇØ´ç desc¿¡ ÀÖ´Â À¯ÀúµéÀ» Áö¿î´Ù. void FlushOutput(); void Boot(LPDESC d); // p2p 󸮿¡ ÇÊ¿äÇÑ Á¤º¸¸¦ º¸³»ÁØ´Ù. (Àü ij¸¯ÅÍÀÇ ·Î±×ÀÎ Á¤º¸ µî) void Send(const void * c_pvData, int iSize, LPDESC except = NULL); void Login(LPDESC d, const TPacketGGLogin * p); void Logout(const char * c_pszName); CCI * Find(const char * c_pszName); CCI * FindByPID(DWORD pid); int GetCount(); int GetEmpireUserCount(int idx); int GetDescCount(); void GetP2PHostNames(std::string& hostNames); private: void Logout(CCI * pkCCI); CInputProcessor * m_pkInputProcessor; int m_iHandleCount; typedef std::unordered_map TCCIMap; typedef std::unordered_map TPIDCCIMap; std::unordered_set m_set_pkPeers; TCCIMap m_map_pkCCI; TPIDCCIMap m_map_dwPID_pkCCI; int m_aiEmpireUserCount[EMPIRE_MAX_NUM]; }; #endif /* P2P_MANAGER_H_ */