#include "stdafx.h" #include "RylServerGroupSetup.h" // forward decl. void ReadRylServerStringValues(CRylServerGroupSetup::ServerStringMap& serverStringMap, const char* szReadSection, const char* szKey, const char* szFileName); void WriteRylServerStringValues(CRylServerGroupSetup::ServerStringMap& serverStringMap, const char* szReadSection, const char* szKey, const char* szFileName); CRylServerGroupSetup& CRylServerGroupSetup::GetInstance() { static CRylServerGroupSetup rylServerGroupSetup; return rylServerGroupSetup; } CRylServerGroupSetup::CRylServerGroupSetup() { SetSetupFileName("./RylSetupServerGroup.ini"); Load(); } CRylServerGroupSetup::~CRylServerGroupSetup() { } const char* CRylServerGroupSetup::GetSetupString(SetupType eSetupType, unsigned long dwKey) { ServerStringMap::iterator pos; ServerStringMap::iterator end; switch(eSetupType) { case SERVER_GROUP: pos = m_ServerGroup.find(dwKey); end = m_ServerGroup.end(); break; case SERVER_TYPE: pos = m_ServerType.find(dwKey); end = m_ServerType.end(); break; case SERVER_ZONE: pos = m_ServerZone.find(dwKey); end = m_ServerZone.end(); break; case SERVER_CHANNEL: pos = m_ServerChannel.find(dwKey); end = m_ServerChannel.end(); break; default: return 0; } return (pos != end) ? pos->second.c_str() : 0; } void CRylServerGroupSetup::Load(const char* szFileName) { m_ServerGroup.clear(); m_ServerType.clear(); m_ServerZone.clear(); m_ServerChannel.clear(); ReadRylServerStringValues(m_ServerGroup, "SERVER_GROUP", "SERVER_GROUP", szFileName); ReadRylServerStringValues(m_ServerType, "SERVER_TYPE", "SERVER_TYPE", szFileName); ReadRylServerStringValues(m_ServerZone, "GAMESERVER", "GAME_ZONE", szFileName); ReadRylServerStringValues(m_ServerChannel, "GENERAL", "GAME_CHANNEL", szFileName); } void CRylServerGroupSetup::Save(const char* szFileName) { WriteRylServerStringValues(m_ServerGroup, "SERVER_GROUP", "SERVER_GROUP", szFileName); WriteRylServerStringValues(m_ServerType, "SERVER_TYPE", "SERVER_TYPE", szFileName); WriteRylServerStringValues(m_ServerZone, "GAMESERVER", "GAME_ZONE", szFileName); WriteRylServerStringValues(m_ServerChannel, "GENERAL", "GAME_CHANNEL", szFileName); } void CRylServerGroupSetup::SetSetupFileName(const char* szFileName) { if(0 != szFileName) { _snprintf(m_szSetupFileName, MAX_PATH - 1, "%s", szFileName); m_szSetupFileName[MAX_PATH - 1] = 0; } } unsigned long CRylServerGroupSetup::GetStringNum(SetupType eSetupType) { switch(eSetupType) { case SERVER_GROUP: return m_ServerGroup.size(); case SERVER_TYPE: return m_ServerType.size(); case SERVER_ZONE: return m_ServerZone.size(); case SERVER_CHANNEL: return m_ServerChannel.size(); } return 0; } void ReadRylServerStringValues(CRylServerGroupSetup::ServerStringMap& serverStringMap, const char* szReadSection, const char* szKey, const char* szFileName) { char szNumKey[MAX_PATH]; char szStringKey[MAX_PATH]; char szStringValue[MAX_PATH]; unsigned long dwKey = 0; const unsigned long dwInvalidKey = 0xFFFFFFFF; _snprintf(szStringKey, MAX_PATH - 1, "%s_NUM", szKey); UINT nNum = GetPrivateProfileInt(szReadSection, szStringKey, 0, szFileName); for(UINT nIndex = 0; nIndex < nNum; ++nIndex) { _snprintf(szNumKey, MAX_PATH - 1, "%s_KEY%d", szKey, nIndex); _snprintf(szStringKey, MAX_PATH - 1, "%s_STRING%d", szKey, nIndex); dwKey = static_cast(GetPrivateProfileInt(szReadSection, szNumKey, dwInvalidKey, szFileName)); GetPrivateProfileString(szReadSection, szStringKey, "", szStringValue, MAX_PATH, szFileName); if(dwKey != dwInvalidKey && 0 != szStringValue[0]) { serverStringMap.insert(CRylServerGroupSetup::ServerStringMap::value_type(dwKey, szStringValue)); } } } void WriteRylServerStringValues(CRylServerGroupSetup::ServerStringMap& serverStringMap, const char* szReadSection, const char* szKey, const char* szFileName) { char szNumKey[MAX_PATH]; char szNumValue[MAX_PATH]; char szStringKey[MAX_PATH]; char szStringValue[MAX_PATH]; CRylServerGroupSetup::ServerStringMap::iterator pos = serverStringMap.begin(); CRylServerGroupSetup::ServerStringMap::iterator end = serverStringMap.end(); UINT nIndex = 0; for(;pos != end; ++pos, ++nIndex) { CRylServerGroupSetup::ServerStringMap::value_type& value = *pos; _snprintf(szNumKey, MAX_PATH - 1, "%s_KEY%d", szKey, nIndex); _snprintf(szStringKey, MAX_PATH - 1, "%s_STRING%d", szKey, nIndex); _snprintf(szNumValue, MAX_PATH - 1, "%d", value.first); WritePrivateProfileString(szReadSection, szNumKey, szNumValue, szFileName); WritePrivateProfileString(szReadSection, szStringKey, value.second.c_str(), szFileName); } _snprintf(szStringKey, MAX_PATH - 1, "%s_NUM", szKey); _snprintf(szStringValue, MAX_PATH - 1, "%d", serverStringMap.size()); WritePrivateProfileString(szReadSection, szStringKey, szStringValue, szFileName); }