#pragma once #include class UnitServer; typedef util::SolarHashTable UNITSERVER_HASH; typedef UNITSERVER_HASH::iterator UNITSERVER_HASH_ITR; class Channel { enum { DEFAULT_UNITSERVER_POOL_SIZE = 10 }; friend class WorldManager; friend class World; public: Channel(); ~Channel(); VOID Init( BYTE byWorldKey, BYTE byChannelKey ); VOID Release(); BYTE GetKey() { return m_byChannelKey; } UnitServer * AllocUnitServer( DWORD dwUnitServerKey ); VOID FreeUnitServer( UnitServer *pUnitServer ); // ¼­¹ö ±¸µ¿, Á¾·á, ÆÐÄ¡ VOID ExecuteStart( DWORD dwUserKey ); VOID ExecuteEnd( DWORD dwUserKey ); BOOL ExecutePatch( DWORD dwUserKey ); VOID ExecuteForceDisconnect( DWORD dwUserKey ); VOID SetServerStatus( eSERVER_STATUS status ); BOOL CheckServerStatus( eSERVER_STATUS CheckStatus ); VOID SerializeServerInfoStream( SERVER_TOTAL_INFO & OUT rServerTotInfo ); VOID SerializeServerInfoStreamForUser( SERVER_TOTAL_INFO & OUT rServerTotInfo, DWORD dwUserGUID ); VOID SerializeFtpInfoStreamForUser( FTP_TOTAL_INFO & OUT rFtpTotInfo, DWORD dwUserGUID ); #ifdef __20080312__SOLARAUTH_SERVER_PATCH VOID SerializeScriptFolderInfoStream( SCRIPTFOLDER_TOTAL_INFO& OUT rSCFolderTotInfo, DWORD dwUserGUID ); #endif UnitServer * FindUnitServer( DWORD dwUnitServerKey ) { return m_UnitServerHash.GetData( dwUnitServerKey ); } UnitServer * FindUnitServerByAgent( DWORD dwAgentKey, eGAME_SERVER_TYPE byServerType ); UnitServer * FindUnitServer( eGAME_SERVER_TYPE byServerType, BYTE byServerNum ); #ifdef _NA_006543_20130318_HEARTBEAT //AgentKey Çϳª·Î ±× Agent¿¡ ¼ÓÇÑ Ã¤³Î,¼­¹öµéÀ» ¾Ë±â À§ÇÑ ÇÔ¼öµé UnitServer * FindFirstUnitServerByAgentKey(DWORD dwAgentKey); // ÇØ´ç agentkey¸¦ °¡Áø ¼­¹ö¸¦ Çϳª ¸®ÅÏ #endif private: BYTE m_byWorldKey; BYTE m_byChannelKey; UNITSERVER_HASH m_UnitServerHash; CMemoryPoolFactory *m_pUnitServerPool; };