#ifndef _MASTERSERVER_H_ #define _MASTERSERVER_H_ #include #include #include #include #include // ¼­¹ö ÅëÈ­·® À§ÇØ #include #include #include using namespace std; class IOCPServer; class Session; class GameDBProxySession; class AccountDBProxySession; class OpServerSession; class RemoteServerSession; class NetworkObject; struct SERVER_MONEY_INFO; class ServerSession; class SolarAuthServerSession; typedef util::SolarHashTable SERVERKEY_HASH; typedef util::SolarHashTable::iterator SERVERKEY_HASH_ITR; // ½ÇÁ¦ Á¢¼ÓÁßÀÎ ¼­¹ö Ű º¸°ü(Key = SERVER_KEY) typedef vector SERVERKEY_VEC; typedef SERVERKEY_VEC::iterator SERVERKEY_VEC_ITER; // ä³Î ´ÜÀ§·Î Á¢¼ÓÁßÀÎ ¼­¹ö ¸ñ·Ï º¸°ü(Key = ChannelIndex) typedef map CHANNEL_MAP; typedef CHANNEL_MAP::iterator CHANNEL_MAP_ITER; typedef pair CHANNEL_MAP_PAIR; // ¿ùµå ´ÜÀ§·Î Á¢¼ÓÁßÀÎ ¼­¹ö ¸ñ·Ï º¸°ü(Key = WorldIndex) typedef map WORLD_MAP; typedef WORLD_MAP::iterator WORLD_MAP_ITER; typedef pair WORLD_MAP_PAIR; //#define _WHATTHEHELL_AGENTSHUTDOWN_20060524 enum eEXIT_TYPE { eEXIT_NONE, // ¾ÈÇÏ´Â »óÅ #ifdef _WHATTHEHELL_AGENTSHUTDOWN_20060524 eEXIT_AGENTSTART, // Agent¼­¹ö Á¾·á ½ÃÀÛ eEXIT_AGENTWAIT, // Á¾·á ÆÐŶ º¸³»°í ´ë±âÁß #endif eEXIT_GAMESTART, // Game¼­¹ö Á¾·á ½ÃÀÛ eEXIT_GAMEWAIT, // Á¾·á ÆÐŶ º¸³»°í ´ë±âÁß eEXIT_DBPROXY, // GameDBProxy Á¾·á ½ÃÀÛ eEXIT_DBPROXYWAIT, // Á¾·á ÆÐŶ º¸³»°í ´ë±âÁß eEXIT_END, // »¡·¡ ³¡~ }; class MasterServer : public Singleton { enum { IOHANDLER_KEY = 0, INSIDE_IOHANDLER = IOHANDLER_KEY, OUTSIDE_IOHANDLER = 1, MAX_SIZE_IOHANDLER = 2 }; friend NetworkObject* CallBackOnAccept( DWORD dwNetworkIndex ); friend VOID CallBackOnDisconnect( DWORD dwSessionIndex, NetworkObject *pNetworkObject ); public: MasterServer(); ~MasterServer(); BOOL Init(); VOID Release(); VOID Run(); BOOL Update(); VOID StartListen(); VOID ConnectToServer( NetworkObject *pNetworkObject, char *pszIP, WORD wPort ); #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ VOID ConnectToServerOutside( NetworkObject *pNetworkObject, char *pszIP, WORD wPort ); static VOID StartDataService(); inline ePHASE_SHIFT GetPhaseStatus() { return m_PHASE_SHIFT; } inline VOID SetPhaseStatus( ePHASE_SHIFT phase ) { m_PHASE_SHIFT = phase; } #endif //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ inline VOID Shutdown() { m_bShutdown = TRUE; } inline BOOL IsOnShutdown() { return m_bShutdown; } BOOL IsConnectedTo( eSERVER_TYPE eServerType ); // VOID SetMoney( SERVER_KEY serverkey, ULONGLONG &ui64GetMoney, ULONGLONG &ui64LoseMoney, ULONGLONG &ui64UserMoney ); // BOOL GetMoney( SERVER_KEY serverkey, ULONGLONG &ui64GetMoney, ULONGLONG &ui64LoseMoney, ULONGLONG &ui64UserMoney ); // VOID RemoveMoney( SERVER_KEY serverkey ); // DWORD GetMoneyInfoNum(); // VOID SetMoneyInfoFirst(); // SERVER_MONEY_INFO* GetMoneyInfoNext(); inline eSERVER_TYPE GetServerType() { return MASTER_SERVER; } // ¼­¹ö Á¾·á °ü·Ã inline BOOL IsExitServer() { return m_bExitServer; } inline VOID SetExitServer( BOOL bExit = TRUE ) { m_bExitServer = bExit; m_bExitFailed = FALSE; } inline VOID SetExitKey( DWORD dwKey, __int64 i64WopsKey ) { m_dwExitKey = dwKey; m_i64WopsKey = i64WopsKey; } inline DWORD GetExitKey() { return m_dwExitKey; } inline __int64 GetExit64Key() { return m_i64WopsKey; } inline eEXIT_TYPE GetExitType() { return m_eExitType; } inline VOID SetExitType( eEXIT_TYPE eExit ) { m_eExitType = eExit; } #ifdef _WHATTHEHELL_AGENTSHUTDOWN_20060524 BOOL AddExitAgentServer( SERVER_KEY sServerKey ); VOID RemoveExitAgentServer( SERVER_KEY serverKey ); #endif BOOL AddExitServer( SERVER_KEY sServerKey ); // Á¾·áÇÒ ¼­¹ö Ãß°¡ VOID RemoveExitServer( SERVER_KEY serverKey ); // Á¾·áÇÒ ¼­¹ö »èÁ¦ BOOL AddExitDBServer( SERVER_KEY sServerKey ); // Á¾·áÇÒ ¼­¹ö(DB) Ãß°¡ VOID RemoveExitDBServer( SERVER_KEY sServerKey ); // Á¾·áÇÒ ¼­¹ö(DB) »èÁ¦ BOOL CheckExitServer(); // Á¾·á ¸í·É ¹Þ¾Ò´ÂÁö È®ÀÎÇϰí, Á¾·áµÇ¾úÀ¸¸é TRUE inline ServerSession* GetOpServer() { return (ServerSession*)m_pOpServerSession; } inline ServerSession* GetAccountDBProxyServer() { return (ServerSession*)m_pAccountDBProxySession; } VOID AddServerMap( SERVER_KEY &serverKey ); VOID RemoveServerMap( SERVER_KEY &serverKey ); VOID CheckServerMoney(); VOID CheckStatistics(); VOID CheckServerWarehouseMoney(); VOID SendMoneyReq(); BOOL SendRestrictReq(); VOID SendRestrictAns(); private: BOOL ProcessConsole(); VOID UpdateFPS(); VOID DisplayServerInfo(); VOID MaintainConnection(); #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ private: SolarAuthServerSession* m_pSolarAuthServerSession; ePHASE_SHIFT m_PHASE_SHIFT; //GLOBAL_SERVER_INFO... #endif IOCPServer *m_pIOCPServer; AccountDBProxySession *m_pAccountDBProxySession; OpServerSession *m_pOpServerSession; BOOL m_bShutdown; DWORD m_dwFPS; util::Timer m_ReconnectTimer; util::SolarHashTable *m_pServerMoneyInfoTable; SERVER_KEY m_ExitServerKey; // RTTA¿¡¼­ ¹ÞÀº Á¤»óÁ¾·á ÇÁ·ÎÅäÄÝ¿¡¼­ °¡¸®Å°´Â ¼­¹ö Ű BOOL m_bExitServer; // ¼­¹ö Á¤»óÁ¾·áÁßÀΰ¡? DWORD m_dwExitKey; // RTT¿¡¼­ º¸³»ÁÖ´Â Á¾·á Ű. ±×´ë·Î º¸°üÇß´Ù°¡ µ¹·ÁÁà¾ß ÇÑ´Ù __int64 m_i64WopsKey; // RTT¿¡¼­ º¸³»ÁÖ´Â Á¾·á Ű2. ±×´ë·Î º¸°üÇß´Ù°¡ µ¹·ÁÁà¾ß ÇÑ´Ù eEXIT_TYPE m_eExitType; // Á¾·á ÆÐŶ º¸³½ »óÅÂÀΰ¡? #ifdef _WHATTHEHELL_AGENTSHUTDOWN_20060524 // ¿¡ÀÌÀüÆ®ºÎÅÍ ¸ÕÀú Á¾·áÇÏ´Â ÄÚµå SERVERKEY_HASH *m_pExitAgentTable; // Á¤»óÁ¾·á ÇÁ·ÎÅäÄÝ ¹Þ¾ÒÀ» ¶§ Agent ¸ÕÀú Á¾·á½ÃŰ´Â ºÎºÐ #endif SERVERKEY_HASH *m_pExitServerTable; // Á¤»óÁ¾·áÇÒ ¼­¹ö ¸ñ·Ï-Á¾·á ÇÁ·ÎÅäÄÝ ¹Þ´Â ¼ø°£ Á¢¼ÓµÈ ¼­¹öµéÀ» ÀúÀå SERVERKEY_HASH *m_pExitDBServerTable; // Á¤»óÁ¾·áÇÒ GameDBProxy¼­¹ö ¸ñ·Ï-Á¾·á ÇÁ·ÎÅäÄÝ ¹Þ´Â ¼ø°£ Á¢¼ÓµÈ ¼­¹öµéÀ» ÀúÀå util::Timer m_ExitTimer; // Á¾·á ´ë±â¿ë ŸÀÌ¸Ó BOOL m_bExitFailed; // Á¾·á ½ÇÆÐ(ÀÌ »óŸé ÀÌÈÄ·Î ÆÐŶÀ» RTT·Î º¸³»Áö ¾Ê´Â´Ù) WORLD_MAP m_WorldMap; util::Timer m_MoneyTimer; // °¢ Game¼­¹ö¿¡¼­ ÅëÈ­·® Á¤º¸ ¾ò¾î¿À´Â ÁÖ±â }; #endif // _MASTERSERVER_H_