#ifndef _RYL_SERVER_GROUP_SETUP_H_ #define _RYL_SERVER_GROUP_SETUP_H_ #pragma warning(disable:4800) #include #include #include class CRylServerGroupSetup { public: typedef std::basic_string, boost::pool_allocator > boost_string; typedef std::map, boost::pool_allocator > > ServerStringMap; enum SetupType { SERVER_GROUP, SERVER_TYPE, SERVER_ZONE, SERVER_CHANNEL }; static CRylServerGroupSetup& GetInstance(); const char* GetSetupString(SetupType eSetupType, unsigned long dwKey); unsigned long GetStringNum(SetupType eSetupType); void Load(const char* szFileName = GetInstance().GetSetupFileName()); void Save(const char* szFileName = GetInstance().GetSetupFileName()); void SetSetupFileName(const char* szFileName); const char* GetSetupFileName() { return m_szSetupFileName; } template void EnumSetup(SetupType eSetupType, FnProcess fnProcess) { ServerStringMap::iterator pos; ServerStringMap::iterator end; switch(eSetupType) { case SERVER_GROUP: pos = m_ServerGroup.begin(); end = m_ServerGroup.end(); break; case SERVER_TYPE: pos = m_ServerType.begin(); end = m_ServerType.end(); break; case SERVER_ZONE: pos = m_ServerZone.begin(); end = m_ServerZone.end(); break; case SERVER_CHANNEL: pos = m_ServerChannel.begin(); end = m_ServerChannel.end(); break; default: return; } for(; pos != end; ++pos) { ServerStringMap::value_type& value = *pos; fnProcess(value.first, value.second.c_str()); } } private: CRylServerGroupSetup(); ~CRylServerGroupSetup(); ServerStringMap m_ServerGroup; ServerStringMap m_ServerType; ServerStringMap m_ServerZone; ServerStringMap m_ServerChannel; char m_szSetupFileName[MAX_PATH]; }; #endif