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

154 lines
8.8 KiB
C++

/**
*.ini 파일을 읽어 들이는 클래스를 정의함
*/
#include "stdafx.h"
#include "FileParser.h"
CFileParser::CFileParser(void)
{
}
CFileParser::~CFileParser(void)
{
}
void CFileParser::Init()
{
}
#pragma warning (push)
#pragma warning (disable: 4244)
BOOL CFileParser::ParseInitFile(char* szFileName)
{
char szFullPath[512];
memset(&m_ServerEnv, NULL, sizeof(SERVER_ENV));
DWORD dwError = GetCurrentDirectory( 512, szFullPath );
if(0 == dwError)
{
return FALSE;
}
strcat(szFullPath, "\\");
strcat(szFullPath, szFileName); // 주어지는 파일 이름에 대한 풀 패스를 설정함
// COMMON SECTION 설정 시작
m_ServerEnv.bGetServerInfoFromFile = GetPrivateProfileInt("COMMON", "GET_SERVERINFO_FROM_FILE", NULL, szFullPath);
m_ServerEnv.bGMListApply = GetPrivateProfileInt("COMMON", "GMLIST_APPLY", NULL, szFullPath);
m_ServerEnv.byFieldServerType = GetPrivateProfileInt("COMMON", "FIELD_SERVER_TYPE", NULL, szFullPath);
m_ServerEnv.byBattleServerType = GetPrivateProfileInt("COMMON", "BATTLE_SERVER_TYPE", NULL, szFullPath);
m_ServerEnv.bVillageRenderInfo = GetPrivateProfileInt("COMMON", "VILLAGE_RENDERINFO", NULL, szFullPath);
//m_ServerEnv.bCryptography = GetPrivateProfileInt("COMMON", "CRYPTOGRAPHY_ENABLED", NULL, szFullPath);
//m_ServerEnv.bCrypto_KeyChange = GetPrivateProfileInt("COMMON", "CRYPTO_KEY_CHANGED", NULL, szFullPath);
//m_ServerEnv.dwCrypto_KeyChange_Interval = GetPrivateProfileInt("COMMON", "CRYPTO_KEY_CHANGE_INTERVAL", NULL, szFullPath);
//if( m_ServerEnv.dwCrypto_KeyChange_Interval < SERVER_ENV::CRYPTO_KEYCHANGE_INTERVAL_MIN || m_ServerEnv.dwCrypto_KeyChange_Interval > SERVER_ENV::CRYPTO_KEYCHANGE_INTERVAL_MAX )
//{
// //SUNLOG( eCRITICAL_LOG, "CRYPTO_KEY_CHANGE_INTERVAL 주기값이 범위를 벗어났습니다. 기본값을 %u초로 설정합니다.\n", (DWORD)(SERVER_ENV::CRYPTO_KEYCHANGE_INTERVAL_MIN/1000) );
// m_ServerEnv.dwCrypto_KeyChange_Interval = SERVER_ENV::CRYPTO_KEYCHANGE_INTERVAL_MIN;
//}
m_ServerEnv.byServiceMode = GetPrivateProfileInt("COMMON", "SERVICE_MODE", NULL, szFullPath);
m_ServerEnv.byAgeGrade = GetPrivateProfileInt("COMMON", "AGE_GRADE", NULL, szFullPath);
m_ServerEnv.byServerStatus = GetPrivateProfileInt("COMMON", "SERVER_STATUS", NULL, szFullPath);
if( !m_ServerEnv.byServerStatus || !(m_ServerEnv.byServerStatus < 5/*eSERVER_UPPERBOUND*/) )
return FALSE;
// [CLIENT_IOHANDLER] 설정 시작
INI_IOHANDLER_DESC &cio = m_ServerEnv.ClientIoHandler;
GetPrivateProfileString( "CLIENT_IOHANDLER", "IP", NULL, m_ServerEnv.ClientIoHandler.szIP, MAX_IPADDRESS_SIZE, szFullPath);
cio.wPort = GetPrivateProfileInt( "CLIENT_IOHANDLER", "PORT", NULL, szFullPath );
cio.dwMaxAcceptSession = GetPrivateProfileInt( "CLIENT_IOHANDLER", "MAX_ACCEPT_SESSION", NULL, szFullPath );
cio.dwMaxConnectSession = GetPrivateProfileInt( "CLIENT_IOHANDLER", "MAX_CONNECT_SESSION", NULL, szFullPath );
cio.dwSendBufferSize = GetPrivateProfileInt( "CLIENT_IOHANDLER", "SEND_BUFFER_SIZE", NULL, szFullPath );
cio.dwRecvBufferSize = GetPrivateProfileInt( "CLIENT_IOHANDLER", "RECV_BUFFER_SIZE", NULL, szFullPath );
cio.dwTimeOut = GetPrivateProfileInt( "CLIENT_IOHANDLER", "TIME_OUT", NULL, szFullPath );
cio.dwNumberOfAcceptThreads = GetPrivateProfileInt( "CLIENT_IOHANDLER", "NUMBER_OF_ACCEPT_THREADS", NULL, szFullPath );
cio.dwNumberOfIoThreads = GetPrivateProfileInt( "CLIENT_IOHANDLER", "NUMBER_OF_IO_THREADS", NULL, szFullPath );
cio.dwNumberOfConnectThreads = GetPrivateProfileInt( "CLIENT_IOHANDLER", "NUMBER_OF_CONNECT_THREADS", NULL, szFullPath );
cio.dwMaxPacketSize = GetPrivateProfileInt( "CLIENT_IOHANDLER", "MAX_PACKET_SIZE", NULL, szFullPath );
// [SERVER_IOHANDLER] 설정 시작
INI_IOHANDLER_DESC &sio = m_ServerEnv.ServerIoHandler;
GetPrivateProfileString( "SERVER_IOHANDLER", "IP", NULL, m_ServerEnv.ServerIoHandler.szIP, MAX_IPADDRESS_SIZE, szFullPath);
sio.wPort = GetPrivateProfileInt( "SERVER_IOHANDLER", "PORT", NULL, szFullPath );
sio.dwMaxAcceptSession = GetPrivateProfileInt( "SERVER_IOHANDLER", "MAX_ACCEPT_SESSION", NULL, szFullPath );
sio.dwMaxConnectSession = GetPrivateProfileInt( "SERVER_IOHANDLER", "MAX_CONNECT_SESSION", NULL, szFullPath );
sio.dwSendBufferSize = GetPrivateProfileInt( "SERVER_IOHANDLER", "SEND_BUFFER_SIZE", NULL, szFullPath );
sio.dwRecvBufferSize = GetPrivateProfileInt( "SERVER_IOHANDLER", "RECV_BUFFER_SIZE", NULL, szFullPath );
sio.dwTimeOut = GetPrivateProfileInt( "SERVER_IOHANDLER", "TIME_OUT", NULL, szFullPath );
sio.dwNumberOfAcceptThreads = GetPrivateProfileInt( "SERVER_IOHANDLER", "NUMBER_OF_ACCEPT_THREADS", NULL, szFullPath );
sio.dwNumberOfIoThreads = GetPrivateProfileInt( "SERVER_IOHANDLER", "NUMBER_OF_IO_THREADS", NULL, szFullPath );
sio.dwNumberOfConnectThreads = GetPrivateProfileInt( "SERVER_IOHANDLER", "NUMBER_OF_CONNECT_THREADS", NULL, szFullPath );
sio.dwMaxPacketSize = GetPrivateProfileInt( "SERVER_IOHANDLER", "MAX_PACKET_SIZE", NULL, szFullPath );
/// Master Server 정보 얻기
GetPrivateProfileString("MASTERSERVER", "MASTERSERVER_IP", NULL, m_ServerEnv.pszMasterServerIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wMasterServerPort = GetPrivateProfileInt("MASTERSERVER", "MASTERSERVER_PORT", NULL, szFullPath);
// Account DB proxy server 정보 얻기
GetPrivateProfileString("ACCOUNTDBPROXYSERVER", "ACCOUNTDBPROXYSERVER_IP", NULL, m_ServerEnv.pszAccountDBProxyServerIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wAccountDBProxyServerPort = GetPrivateProfileInt("ACCOUNTDBPROXYSERVER", "ACCOUNTDBPROXYSERVER_PORT", NULL, szFullPath);
// Game DB proxy server 정보 얻기
GetPrivateProfileString("GAMEDBPROXYSERVER", "GAMEDBPROXYSERVER_IP", NULL, m_ServerEnv.pszGameDBProxyServerIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wGameDBProxyServerPort = GetPrivateProfileInt("GAMEDBPROXYSERVER", "GAMEDBPROXYSERVER_PORT", NULL, szFullPath);
// Agent server 정보 얻기
GetPrivateProfileString("AGENTSERVER", "AGENTSERVER_OUTSIDE_IP", NULL, m_ServerEnv.pszAgentServerOutSideIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wAgentServerOutSidePort = GetPrivateProfileInt("AGENTSERVER", "AGENTSERVER_OUTSIDE_PORT", NULL, szFullPath);
GetPrivateProfileString("AGENTSERVER", "AGENTSERVER_INSIDE_IP", NULL, m_ServerEnv.pszAgentServerInSideIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wAgentServerInSidePort = GetPrivateProfileInt("AGENTSERVER", "AGENTSERVER_INSIDE_PORT", NULL, szFullPath);
// Portal server 정보 얻기
GetPrivateProfileString("PORTALSERVER", "PORTALSERVER_IP", NULL, m_ServerEnv.pszPortalServerIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wPortalServerPort = GetPrivateProfileInt("PORTALSERVER", "PORTALSERVER_PORT", NULL, szFullPath);
// AuthAgentServer
m_ServerEnv.bEnableAuthAgentServer = GetPrivateProfileInt("AUTHAGENTSERVER", "ENABLE_AUTH_AGENT_SERVER", NULL, szFullPath);
m_ServerEnv.wAgentServerID = GetPrivateProfileInt("AUTHAGENTSERVER", "AGENTSERVER_ID", NULL, szFullPath);
GetPrivateProfileString("AUTHAGENTSERVER", "AUTHAGENTSERVER_IP", NULL, m_ServerEnv.pszAuthAgentServerIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wAuthAgentServerPort = GetPrivateProfileInt("AUTHAGENTSERVER", "AUTHAGENTSERVER_PORT", NULL, szFullPath);
// WorldServer
GetPrivateProfileString("WORLDSERVER", "WORLDSERVER_IP", NULL, m_ServerEnv.pszWorldServerIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wWorldServerPort = GetPrivateProfileInt("WORLDSERVER", "WORLDSERVER_PORT", NULL, szFullPath);
GetPrivateProfileString("WORLDSERVER", "WORLDSERVER_CLIENT_IP", NULL, m_ServerEnv.pszWorldServerClientIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wWorldServerClientPort = GetPrivateProfileInt("WORLDSERVER", "WORLDSERVER_CLIENT_PORT", NULL, szFullPath);
// GuildServer
GetPrivateProfileString("GUILDSERVER", "GUILDSERVER_IP", NULL, m_ServerEnv.pszGuildServerIP, MAX_IPADDRESS_SIZE, szFullPath);
m_ServerEnv.wGuildServerPort = GetPrivateProfileInt("GUILDSERVER", "GUILDSERVER_PORT", NULL, szFullPath);
// DB(SQL Server)의 IP주소(2005.04.26 추가)
GetPrivateProfileString("SQLSERVER", "SQLSERVER_IP", NULL, m_ServerEnv.pszSQLServerIP, MAX_IPADDRESS_SIZE, szFullPath);
// Log File 저장 경로
GetPrivateProfileString("LOGFILE", "WOPS_LOGFILE_PATH", NULL, m_ServerEnv.pszLogPath, MAX_LOGPATH_LEN, szFullPath);
m_ServerEnv.byLogOption = GetPrivateProfileInt("LOGFILE", "WOPS_LOGFILE_OPTION", NULL, szFullPath);
// SUN LOGFILE 정보 저장
m_ServerEnv.bySunLogOption = GetPrivateProfileInt("LOGFILE", "SUN_LOGFILE_OPTION", 0, szFullPath);
m_ServerEnv.bySunLogfileLevel = GetPrivateProfileInt("LOGFILE", "SUN_LOGFILE_LEVEL", 0, szFullPath);
GetPrivateProfileString("LOGFILE", "SUN_LOGFILE_PATH", NULL, m_ServerEnv.pszSunLogfilePath, MAX_LOGPATH_LEN, szFullPath);
m_ServerEnv.dwServerInfoCycle = GetPrivateProfileInt("LOGFILE", "SERVERINFO_CYCLE", 0, szFullPath);
// 반드시 있어야 하는 값 체크!!
if( m_ServerEnv.ClientIoHandler.dwMaxAcceptSession == 0 ) return FALSE;
if( m_ServerEnv.ServerIoHandler.wPort == 0 ) return FALSE;
return TRUE;
}
#pragma warning (pop)