#include "stdafx.h" #include "PortalServer.h" #include #include #include "PortalScriptParserManager.h" PortalServer g_PortalServer; NetworkObject * PortalServer::DoAllocServerSession() { return (NetworkObject *)g_PortalServer.AllocServerSession(TEMP_SERVER); } VOID PortalServer::DoFreeServerSession( NetworkObject * pNetObject ) { g_PortalServer.FreeServerSession((ServerSession*)pNetObject); } PortalServer::PortalServer() : m_pDBProxySession(NULL) , m_pMasterSession(NULL) , m_WEEKDAY_NUMBER_OF_RANKING_PERIOD(0) { SetPhaseStatus( PHASE_UNKNOWN ); m_pPortalScriptParserManager = NULL; } BOOL PortalServer::SendDBProxy( MSG_BASE * pMsg, WORD wSize ) { return m_pDBProxySession->Send( (BYTE*)pMsg, wSize ); } BOOL PortalServer::SendMaster( MSG_BASE * pMsg, WORD wSize ) { return m_pMasterSession->Send( (BYTE*)pMsg, wSize ); } BOOL PortalServer::IsDBProxyConnected() { if( m_pDBProxySession && m_pDBProxySession->IsConnected() ) return TRUE; return FALSE; } BOOL PortalServer::IsMasterConnected() { if( m_pMasterSession && m_pMasterSession->IsConnected() ) return TRUE; return FALSE; } ServerSession * PortalServer::AllocServerSession( eSERVER_TYPE type ) { ServerSession * pServerSession = NULL; switch( type ) { case FIELD_SERVER: case BATTLE_SERVER: case GAME_SERVER: pServerSession = GameServerSession::ALLOC(); break; case TEMP_SERVER: pServerSession = TempServerSession::ALLOC(); break; case AGENT_SERVER: pServerSession = AgentServerSession::ALLOC(); break; case MASTER_SERVER: { if( m_pMasterSession != NULL ) { SUNLOG( eCRITICAL_LOG, "Master°¡ ConnectÇÒ ¼ö ÀÖ´Â °³¼ö°¡ ³Ñ¾ú½À´Ï´Ù." ); return NULL; } pServerSession = MasterServerSession::ALLOC(); m_pMasterSession = (MasterServerSession*)pServerSession; }break; case GAME_DBPROXY: { if( m_pDBProxySession != NULL ) { SUNLOG( eCRITICAL_LOG, "DB°¡ ConnectÇÒ ¼ö ÀÖ´Â °³¼ö°¡ ³Ñ¾ú½À´Ï´Ù." ); return NULL; } pServerSession = DBProxyServerSession::ALLOC(); m_pDBProxySession = (DBProxyServerSession*)pServerSession; }break; default: { ASSERT(!"Á¸ÀçÇÏÁö ¾Ê´Â ¼­¹öŸÀÔÀÔ´Ï´Ù."); return NULL; } } pServerSession->Init( this ); return pServerSession; } void PortalServer::FreeServerSession( ServerSession * pSession ) { pSession->Release(); switch( pSession->GetServerType() ) { case FIELD_SERVER: case BATTLE_SERVER: case GAME_SERVER: GameServerSession::FREE( (GameServerSession *)pSession ); break; case TEMP_SERVER: TempServerSession::FREE( (TempServerSession *)pSession ); break; case MASTER_SERVER: MasterServerSession::FREE( (MasterServerSession *)pSession ); m_pMasterSession = NULL; break; case AGENT_SERVER: AgentServerSession::FREE( (AgentServerSession *)pSession ); break; case GAME_DBPROXY: DBProxyServerSession::FREE( (DBProxyServerSession *)pSession ); m_pDBProxySession = NULL; break; default: { ASSERT( !"¼­¹öŸÀÔÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù." ); } } } BOOL PortalServer::InitializeLogger() { BYTE bySunLogOption = 0, bySunLogFileLevel = 0; CHAR pszSunLogFilePath[32]; __READ_CONFIG_NUMBER( bySunLogOption, "LOGFILE", "SUN_LOGFILE_OPTION", 0, GetDescFileName() ); __READ_CONFIG_NUMBER( bySunLogFileLevel, "LOGFILE", "SUN_LOGFILE_LEVEL", 0, GetDescFileName() ); __READ_CONFIG_STRING( pszSunLogFilePath, "LOGFILE", "SUN_LOGFILE_PATH", NULL, GetDescFileName() ); DISPMSG( "SUNLOG.Portal Initializing...\t" ); g_pSunLog = new CSunLog; BOOL bRet = g_pSunLog->Init( bySunLogOption, bySunLogFileLevel, pszSunLogFilePath, "Portal" ); g_pSunLog->SetFileOutDelayOption( FALSE ); SUNLOG( eCRITICAL_LOG, "*** PortalServer Start ***" ); SUNLOG( eCRITICAL_LOG, "*** PortalServer Server Version = %d ***", SERVER_RELEASE_BUILD_NO ); if( bRet ) { DISPMSG( " [OK]\n" ); } else { DISPMSG( " Failed!\n" ); } return bRet; } BOOL PortalServer::Init() { if( !InitializeLogger() ) { DISPMSG(" Create SunLog Failed.." ); return FALSE; } m_AgentServerSessionPool.Initialize(20); m_DBProxyServerSessionPool.Initialize(2); m_GameServerSessionPool.Initialize(100); m_TempServerSessionPool.Initialize(100); m_MasterServerSessionPool.Initialize(4); AgentServerSession::SetPool(&m_AgentServerSessionPool); DBProxyServerSession::SetPool(&m_DBProxyServerSessionPool); GameServerSession::SetPool(&m_GameServerSessionPool); TempServerSession::SetPool(&m_TempServerSessionPool); MasterServerSession::SetPool(&m_MasterServerSessionPool); WorkLoadManager::CreateInstance(); Init_ScriptData( IsServerInfoFromFile() ); int m_SettledYear, m_SettledMonth, m_SettledDay, m_PeriodDay, m_SuspendTime; __READ_CONFIG_NUMBER( m_SuspendTime, "ATTRIBUTES", "RANKING_SUSPEND_TIME", 0, GetDescFileName() ); __READ_CONFIG_NUMBER( m_PeriodDay, "ATTRIBUTES", "RANKING_PERIOD_DAY", 0, GetDescFileName() ); __READ_CONFIG_NUMBER( m_SettledYear, "ATTRIBUTES", "RANKING_SETTLED_YEAR", 0, GetDescFileName() ); __READ_CONFIG_NUMBER( m_SettledMonth, "ATTRIBUTES", "RANKING_SETTLED_MONTH", 0, GetDescFileName() ); __READ_CONFIG_NUMBER( m_SettledDay, "ATTRIBUTES", "RANKING_SETTLED_DAY", 0, GetDescFileName() ); ASSERT( m_SuspendTime > 0 && m_PeriodDay > 0 && m_SettledYear > 0 && m_SettledMonth > 0 && m_SettledDay > 0 ); #ifdef _NA_1376_20101123_RANKING_SETTLEMENT_TIME_SHIFT // Á¤»ê ½ÃÁ¡À» suspend time¸¸Å­ µÚ·Î ¹Ð¾î ¾ÕµÚ·Î ÁÖ¾îÁö´Â Áß´Ü ½Ã°£ÀÌ Á¤½Ã¿¡ ½ÃÀÛÇϵµ·Ï º¯°æ int minute = m_SuspendTime; #else int minute = 0; #endif g_RankingMgr.InitComputation( m_SettledYear, m_SettledMonth, m_SettledDay, 0, minute, 0, m_PeriodDay, m_SuspendTime ); #if !defined(__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__) StartServer(); #endif return TRUE; } BOOL PortalServer::Update( DWORD tick ) { g_RankingMgr.Update(); WorkLoadManager::Update(); if( g_pSunLog ) g_pSunLog->Update(); return TRUE; } void PortalServer::Release() { g_RankingMgr.Release(); SetPhaseStatus( PHASE_UNKNOWN ); WorkLoadManager::DestroyInstance(); if( m_pPortalScriptParserManager ) { m_pPortalScriptParserManager->Release(); m_pPortalScriptParserManager->DestroyInstanceEx(); SAFE_DELETE( m_pPortalScriptParserManager ); } SAFE_DELETE(g_pSunLog); } BOOL PortalServer::KeyEvent( char ch ) { switch(ch) { case 'P': break;//DisplayPoolInfo(); break; case 'K': #ifdef _DEBUG g_RankingMgr.DisplayRanking(); #endif g_RankingMgr.Display(); break; } return TRUE; } ServerSession * PortalServer::GetSession( eSERVER_TYPE type ) { switch(type) { case GAME_DBPROXY: return m_pDBProxySession; case MASTER_SERVER: return m_pMasterSession; } return NULL; } BOOL PortalServer::ConnectTo( eSERVER_TYPE type ) { ServerSession * pSession = NULL; switch(type) { case GAME_DBPROXY: pSession = m_pDBProxySession; break; case MASTER_SERVER: pSession = m_pMasterSession; break; } #ifndef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ if( !pSession ) return FALSE; if( pSession->IsConnecting() || pSession->IsConnected() ) { ASSERT( !"Áߺ¹ Connect ½Ãµµ" ); return FALSE; } Connect(pSession); return TRUE; #else //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ if( !pSession ) return FALSE; if( ! IsServerInfoFromFile() ) { if( (MASTER_SERVER != type) && (GetPhaseStatus() != PHASE_SERVICE) ) return FALSE; } if( !( pSession->IsConnecting() || pSession->IsConnected() ) ) { if( (MASTER_SERVER != type) && (! IsServerInfoFromFile() ) && (GetPhaseStatus() != PHASE_SERVICE) ) return FALSE; Connect( pSession ); return TRUE; } ASSERT( !"Áߺ¹ Connect ½Ãµµ" ); return FALSE; #endif //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ } BOOL PortalServer::Init_ScriptData( BOOL bReadFromFile ) { m_pPortalScriptParserManager = new PortalScriptParserManager; m_pPortalScriptParserManager->RegisterParser(); m_pPortalScriptParserManager->InitParserPool( NULL ); #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ return TRUE; #else return m_pPortalScriptParserManager->Load(); #endif } #include // ¸ðµç µ¥ÀÌÅÍ ·ÎµùÀÌ ¿Ï·áµÇ¾úÀ» °æ¿ì ÄݹéÀ¸·Î È£ÃâµÉ °ÍÀÌ´Ù. VOID PortalServer::StartServer() { // <ÇØ¾ß ÇÒ ÀÏ> // // // À̰ÍÀÌ È£ÃâµÇ¾ú´Ù´Â Àǹ̴ ÇÊ¿äÇÑ ¸ðµç µ¥ÀÌÅ͸¦ ¹Þ¾Ò´Ù´Â Àǹ̴Ù. // #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ // Çö ½ÃÁ¡ PHASE_EXCHANGEÀÏ °ÍÀÌ´Ù. MSG_SERVERCOMMON_DATA_TRANSFER_SENDDATA_NTF msgNTF; g_PortalServer.SendMaster( &msgNTF, sizeof(msgNTF) ); #endif //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ } //================================================================================================== //================================================================================================== //==================================================================================================