Files
2022-10-26 12:25:11 +08:00

182 lines
6.5 KiB
C++

//=============================================================================================================================
/// GameServerEx class
/**
@author Kim Min Wook < taiyo@webzen.com >
@since 2006. 9. 4
@remark
- 프레임워크를 상속받아 구현하는 것으로 코드 변경
@note
-
@history
-
*/
//=============================================================================================================================
#pragma once
#include <ServerFrame.h>
#include <MemoryPoolFactory.h>
#include <TempServerSession.h>
#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<AgentServerSession> m_AgentServerSessionPool;
util::CMemoryPoolFactory<GameDBProxySession> m_DBProxyServerSessionPool;
#if !defined(_NA002635_GZ_DZ_PROTOCOL_UINIFICATION)
util::CMemoryPoolFactory<GuildServerSession> m_GuildServerSessionPool;
#endif
util::CMemoryPoolFactory<MasterServerSession> m_MasterServerSessionPool;
#if !defined(_NA002635_GP_DP_PROTOCOL_UINIFICATION)
util::CMemoryPoolFactory<PortalServerSession> m_PortalServerSessionPool;
#endif
util::CMemoryPoolFactory<TempServerSession> m_TempServerSessionPool;
#if !defined _NA_0_20110613_GAME_SHOP_RENEWAL
util::CMemoryPoolFactory<ShopServerSession> 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