#pragma once #include "ServerInfo.h" #include #include #include #include #include class UserSession; class ServerSession; typedef std::list< ServerInfo* > SERVERINFO_LIST; typedef SERVERINFO_LIST::iterator SERVERINFO_LIST_ITER; class ServerInfoManager : public Singleton { public: ServerInfoManager(void); ~ServerInfoManager(void); private: typedef std::map< DWORD, ServerInfo* > SERVERINFO_MAP; typedef SERVERINFO_MAP::iterator SERVERINFO_MAP_ITER; private: SERVERINFO_MAP m_mapServerInfo; public: BOOL AddServerInfo( ServerInfo* pServerInfo ); BYTE GetServerInfoNum(){ return (BYTE)m_mapServerInfo.size(); } VOID Release(); ServerInfo* FindServerInfo( DWORD dwServerKey ); VOID FindServerOnAgent( DWORD dwAgentKey, SERVERINFO_LIST& listServerInfo ); //AgentKey°¡ °°Àº ¼­¹öÁ¤º¸¸¦ ±¸ÇÏÀÚ. ServerInfo* FindServerInfo( DWORD dwAgentKey, BYTE byServerType ); BYTE GetWorldAgentKey( BYTE byWorld, OUT std::set& setAgentKey ); BYTE GetChannelAgentKey( BYTE byWorld, BYTE byChannel, OUT std::set& setAgentKey ); BOOL GetServerInfoForPacket( OUT SERVER_INFO_EX* pServerInfo ); BOOL GetServerKey( SERVER_INFO* pServerInfo, OUT DWORD& rKey ); VOID SendPatchFailMessage( UserSession* pSession, DWORD dwAgentKey ); int GetServerInfoCount(){ return (int)m_mapServerInfo.size(); } VOID ExecuteServerByChannel( BYTE byWorld, BYTE byChannel ); VOID ExecuteServerByWorld( BYTE byWorld ); VOID ExecuteServerByServerKey( DWORD dwServerKey ); //Server Execute private: BYTE FindServerInfoByChannel( BYTE byWorld, BYTE byChannel, OUT SERVERINFO_LIST& listServerInfo ); BYTE FindServerInfoByWorld( BYTE byWorld, OUT SERVERINFO_LIST& listServerInfo ); VOID ExecuteServerList( SERVERINFO_LIST& listServerInfo ); //¼­¹ö½ÇÇà.. VOID ExecuteServer( ServerSession* pAgentSession, ServerInfo* pServerInfo ); public: //Stream VOID SerializeServerInfoStream( BYTE* pStream, WORD wSize, BOOL bSave ); };