//============================================================================================================================= /// GameServerEx class /** @author Kim Min Wook < taiyo@webzen.com > @since 2006. 9. 4 @remark - ÇÁ·¹ÀÓ¿öÅ©¸¦ »ó¼Ó¹Þ¾Æ ±¸ÇöÇÏ´Â °ÍÀ¸·Î ÄÚµå º¯°æ @note - @history - */ //============================================================================================================================= #pragma once #include #include #include #include "AgentServerSession.h" #include "GameDBProxySession.h" #include "GuildServerSession.h" #include "MasterServerSession.h" #include "PortalServerSession.h" #include "ShopServerSession.h" //#include "GameRankingManager.h" #include <3DEngine/3DTerrain/3DTerrain.h> class CFileParser; class GameServerEx : public ServerFrame { public: static NetworkObject * DoAllocServerSession(); static VOID DoFreeServerSession( NetworkObject * pNetObject ); static VOID DoFreeConnectSession( NetworkObject * pNetObject ){__UNUSED(pNetObject);} static NetworkObject * DoAllocClient_NotUsed(){ return NULL; } static VOID DoFreeClient_NotUsed( NetworkObject * pNetObject ){__UNUSED(pNetObject);} static VOID DoFreeConnect_NotUsed( NetworkObject * pNetObject ){__UNUSED(pNetObject);} public: GameServerEx(); virtual ~GameServerEx(); virtual eSERVER_TYPE GetServerType() = 0; BOOL SendToServer( eSERVER_TYPE type, MSG_BASE * pMsg, WORD wSize ); BOOL IsConnected( eSERVER_TYPE type ); BOOL ConnectTo( eSERVER_TYPE type ); void SetServerAddr( eSERVER_TYPE type, char * pszIP, WORD wPort ); public: inline ePHASE_SHIFT GetPhaseStatus() { return m_PHASE_SHIFT; } inline VOID SetPhaseStatus( ePHASE_SHIFT phase ) { m_PHASE_SHIFT = phase; } private: ePHASE_SHIFT m_PHASE_SHIFT; #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ public: static VOID ReadyToStartServer(); static VOID GameServerSyncWithMasterServer(); inline ServerSession* GetMasterServerSession() { return m_pSession[MASTER_SERVER]; } #endif // public: __inline void SetConnectToWorldServer( BOOL v ) { m_bConnectWorldServer = v; } __inline BOOL IsConnectToWorldServer() { return m_bConnectWorldServer; } ServerSession * GetSession( eSERVER_TYPE type ); protected: virtual BOOL Init(); virtual BOOL Update( DWORD tick ); virtual void Release(); public: VOID Finalize(); protected: virtual ServerSession * AllocServerSession( eSERVER_TYPE ); virtual void FreeServerSession( ServerSession * ); BOOL ParserInit(); void ParserRelease(); VOID LogicInit(); private: util::CMemoryPoolFactory m_AgentServerSessionPool; util::CMemoryPoolFactory m_DBProxyServerSessionPool; #if !defined(_NA002635_GZ_DZ_PROTOCOL_UINIFICATION) util::CMemoryPoolFactory m_GuildServerSessionPool; #endif util::CMemoryPoolFactory m_MasterServerSessionPool; #if !defined(_NA002635_GP_DP_PROTOCOL_UINIFICATION) util::CMemoryPoolFactory m_PortalServerSessionPool; #endif util::CMemoryPoolFactory m_TempServerSessionPool; #if !defined _NA_0_20110613_GAME_SHOP_RENEWAL util::CMemoryPoolFactory m_ShopServerSessionPool; #endif ServerSession * m_pSession[MAX_SERVER]; public: VOID DisplayServerInfo( BOOL bLog = FALSE ); VOID ReloadAttributes(); VOID ReloadData(); BOOL IsPVPMode() { return m_bPVPMode; } VOID SetPVPMode( BOOL bPVPMode ) { m_bPVPMode = bPVPMode; } int GetDBConnectorIndex() const { return db_connector_index_; }; void ChangeDBConnectorIndex(int db_connector_index) { db_connector_index_ = db_connector_index; } BOOL NotifyEXPAcquisition( CHARGUID charGuid, eEXP_ACQUISITION_TYPE type, EXPTYPE amount ); BOOL NotifyHeimAcquisition(CHARGUID charGuid, eHEIM_ACQUISITION_TYPE type, MONEY amount); BOOL NotifyHeimConsumption(CHARGUID charGuid, eHEIM_CONSUMPTION_TYPE type, MONEY amount, int lottoAccumRatio = -1); public: FUNC_ContactTerrain m_fnContactTerrain; CLoadHelper * GetLoadHelper() { return m_pLoadHelper; } //Log protected: BOOL GetServerTypeStr( TCHAR* pszServerType, int nSize ); BOOL CreateSunLog(); BOOL CheckServerMode( eSERVER_MODE ServerMode, eSERVER_TYPE ServerType, BYTE byServerPoolType ); bool LoadGameShopConfiguration(); //_NA_0_20110613_GAME_SHOP_RENEWAL private: // custom BOOL m_bConnectWorldServer; int db_connector_index_; //_NA000000_DBQUERY_REVERSAL_STATE_PREVENTION HINSTANCE m_hDll3DTerrain; // 3D¿£ÁøÆÀÀÇ ÁöÇü¿£Áø CLoadHelper * m_pLoadHelper; //HINSTANCE m_hDllNumerical; // 3D¿£ÁøÆÀÀÇ ¼öÄ¡¿£Áø util::Timer m_ServerInfoLogTimer; // ¼­¹öÁ¤º¸ÀÇ ·Î±×¸¦ ³²±â´Â ŸÀ̸Ó. BOOL m_bPVPMode; public: //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND CSunLog* battle_ground_log_; bool MessageBattleGroundOut(eSUN_LOG_LEVEL log_level, const TCHAR* format, ...); #ifdef _NA_008132_20150316_MONDSCHEIN_TEXTLOG CSunLog* mondschein_log_; BOOL MessageMondscheinOut(eSUN_LOG_LEVEL log_level, const TCHAR* format, ...); #endif //_NA_008132_20150316_MONDSCHEIN_TEXTLOG #ifdef _NA_008334_20150608_SONNENSCHEIN CSunLog* sonnenschein_log_; BOOL MessageSonnenScheinOut(eSUN_LOG_LEVEL log_level, const TCHAR* format, ...); #endif //_NA_008334_20150608_SONNENSCHEIN #ifdef _NA_008299_20150519_MAX_DAMAGE_LOG CSunLog* max_damage_log; BOOL MessageMaxDamageOut(eSUN_LOG_LEVEL log_level, const TCHAR* format, ...); #endif // _NA_008299_20150519_MAX_DAMAGE_LOG #ifdef _NA_008706_20160229_TEXTLOG_PK CSunLog* battle_monitor_log_; // ƯÁ¤ À¯ÀúµéÀÇ ÀüÅõ °¨½Ã ¸ñÀû ÅØ½ºÆ®·Î±× BOOL MessageBattleMonitorOut(eSUN_LOG_LEVEL log_level, const TCHAR* format, ...); #endif //_NA_008706_20160229_TEXTLOG_PK }; extern GameServerEx * g_pGameServer; //_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #define SUNBATTLEGROUNDLOG if(g_pGameServer) g_pGameServer->MessageBattleGroundOut #ifdef _NA_008132_20150316_MONDSCHEIN_TEXTLOG #define SUNMONDSCHIENLOG if(g_pGameServer) g_pGameServer->MessageMondscheinOut #endif //_NA_008132_20150316_MONDSCHEIN_TEXTLOG #ifdef _NA_008334_20150608_SONNENSCHEIN #define SUNSONNENSCHEINLOG if(g_pGameServer) g_pGameServer->MessageSonnenScheinOut #endif //_NA_008334_20150608_SONNENSCHEIN #ifdef _NA_008299_20150519_MAX_DAMAGE_LOG #define SUNMAXDAMAGELOG if(g_pGameServer) g_pGameServer->MessageMaxDamageOut #endif // _NA_008299_20150519_MAX_DAMAGE_LOG #ifdef _NA_008706_20160229_TEXTLOG_PK #define SUNBATTLEMONITORLOG if(g_pGameServer) g_pGameServer->MessageBattleMonitorOut #endif //_NA_008706_20160229_TEXTLOG_PK