mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-07 11:17:46 +00:00
new config class for ini files
This commit is contained in:
parent
44c85b3136
commit
c034e4ca79
2 changed files with 111 additions and 0 deletions
66
src/common/Config/ConfigMgr.cpp
Normal file
66
src/common/Config/ConfigMgr.cpp
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
#include "ConfigMgr.h"
|
||||||
|
|
||||||
|
#include <boost/property_tree/ini_parser.hpp>
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads an ini file and parses it
|
||||||
|
* @param configName the name of ini file relative to m_configFolderRoot to load alongside global.ini
|
||||||
|
* @return true if loading was successful
|
||||||
|
*/
|
||||||
|
bool Core::ConfigMgr::loadConfig( const std::string& configName )
|
||||||
|
{
|
||||||
|
std::stringstream configStream;
|
||||||
|
|
||||||
|
// get global config
|
||||||
|
auto configDir = boost::filesystem::path( m_configFolderRoot );
|
||||||
|
|
||||||
|
if( !boost::filesystem::exists( configDir ) )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto globalConfig = boost::filesystem::path( configDir / m_globalConfigFile );
|
||||||
|
if( !boost::filesystem::exists( globalConfig ) )
|
||||||
|
{
|
||||||
|
if( !copyDefaultConfig( globalConfig.filename().string() ) )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ifstream globalConfigFile( globalConfig.c_str() );
|
||||||
|
configStream << globalConfigFile.rdbuf();
|
||||||
|
|
||||||
|
// add some newlines just in case there's no newline at the end of the global file
|
||||||
|
configStream << "\n\n";
|
||||||
|
|
||||||
|
// get local config
|
||||||
|
auto localConfig = boost::filesystem::path( configDir / configName );
|
||||||
|
if( !boost::filesystem::exists( localConfig ) )
|
||||||
|
{
|
||||||
|
if( !copyDefaultConfig( localConfig.filename().string() ) )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
std::ifstream configFile( localConfig.c_str() );
|
||||||
|
configStream << configFile.rdbuf();
|
||||||
|
|
||||||
|
// parse the tree and we're fuckin done
|
||||||
|
boost::property_tree::read_ini( configStream, m_propTree );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Core::ConfigMgr::copyDefaultConfig( const std::string& configName )
|
||||||
|
{
|
||||||
|
boost::filesystem::path configPath( m_configFolderRoot );
|
||||||
|
configPath /= configName;
|
||||||
|
|
||||||
|
if( !boost::filesystem::exists( configPath.c_str() + m_configDefaultSuffix ) )
|
||||||
|
{
|
||||||
|
// no default file :(
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::filesystem::copy_file( configPath.c_str() + m_configDefaultSuffix, configPath );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
45
src/common/Config/ConfigMgr.h
Normal file
45
src/common/Config/ConfigMgr.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#ifndef SAPPHIRE_CONFIGMGR_H
|
||||||
|
#define SAPPHIRE_CONFIGMGR_H
|
||||||
|
|
||||||
|
#include <boost/property_tree/ptree.hpp>
|
||||||
|
|
||||||
|
namespace Core
|
||||||
|
{
|
||||||
|
class ConfigMgr
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ConfigMgr() = default;
|
||||||
|
~ConfigMgr() = default;
|
||||||
|
|
||||||
|
bool loadConfig( const std::string& configName );
|
||||||
|
|
||||||
|
template< class T >
|
||||||
|
T getValue( const std::string& name, T defaultValue = T() )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return m_propTree.get< T >( name );
|
||||||
|
}
|
||||||
|
catch( ... )
|
||||||
|
{
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template< class T >
|
||||||
|
void setValue( const std::string& name, T defaultValue = T() )
|
||||||
|
{
|
||||||
|
m_propTree.put( name, defaultValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool copyDefaultConfig( const std::string& configName );
|
||||||
|
|
||||||
|
boost::property_tree::ptree m_propTree;
|
||||||
|
const std::string m_globalConfigFile = "global.ini";
|
||||||
|
const std::string m_configFolderRoot = "./config/";
|
||||||
|
const std::string m_configDefaultSuffix = ".default";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //SAPPHIRE_CONFIGMGR_H
|
Loading…
Add table
Reference in a new issue