#ifndef _RYL_DBAGENT_SESSION_DATA_MGR_H_ #define _RYL_DBAGENT_SESSION_DATA_MGR_H_ #include "SessionData.h" #include #include #include //! forward decl. class CDBComponent; namespace DBAgent { namespace DataStorage { class CSessionDataMgr { public: static CSessionDataMgr& GetInstance(); // ¼¼¼Ç óÀ½À¸·Î ¿­±â. CSessionData* SessionOpen(unsigned long dwUID); // ¿­·ÁÀÖ´Â ¼¼¼Ç ã±â CSessionData* GetOpenSession(unsigned long dwUID); CSessionData* GetOpenSession(const char* szAccountName, IN_ADDR peerAddress, bool bCheckAddress); CSessionData* GetCharLoadedSession(unsigned long dwCID); // ¼¼¼Ç ´Ý±â void SessionClose(unsigned long dwUID, unsigned long dwSessionID); void SessionCloseWithLogout(unsigned long dwUID, unsigned long dwServerID); void SessionCloseCurrentServer(unsigned long dwServerID); // CharEnable / CharDisable½Ã¿¡ ¿¬°á / ÇØÁ¦µÇ´Â CID¸Ê »ý¼º bool AddCharLoadedSession(unsigned long dwCID, CSessionData& SessionData); bool RemoveCharLoadedSession(unsigned long dwCID); bool IsLoadedChar(const char* szCharName); unsigned int GetSessionNum() { return static_cast(m_uidMap.size()); } unsigned int GetCharEnabledSessionNum() { return static_cast(m_cidMap.size()); } // Load µÈ ij¸¯ÅÍÀÇ ÀνºÅϽº ÀüÀï Ç÷¡±× °ªµéÀ» OFF ·Î ¸¸µé¾îÁØ´Ù. void ClearGuildWarInstanceFlag(); void ClearRealmWarInstanceFlag(); template void Process(FnProcess fnProcess) { SessionMap::iterator pos = m_uidMap.begin(); SessionMap::iterator end = m_uidMap.end(); for(;pos != end; ++pos) { fnProcess(*pos->second); } } template void ProcessRealmPoint(FnProcess fnProcess, unsigned char cType) { SessionMap::iterator pos = m_uidMap.begin(); SessionMap::iterator end = m_uidMap.end(); for(;pos != end; ++pos) { fnProcess(pos->second, cType); } } template void ProcessRealmTime(FnProcess fnProcess, TIME* pTime) { SessionMap::iterator pos = m_uidMap.begin(); SessionMap::iterator end = m_uidMap.end(); for(;pos != end; ++pos) { fnProcess(pos->second, pTime); } } private: typedef std::map SessionPoolCheck; typedef boost::object_pool SessionPool; typedef std::map, boost::fast_pool_allocator > > SessionMap; void SessionCloseWithLogout(SessionMap::iterator logoutPos); SessionMap m_uidMap; SessionMap m_cidMap; //SessionPool m_SessionPool; }; } } #endif