mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-14 03:58:18 +00:00
restructured CConfig
This commit is contained in:
parent
54625ebfbc
commit
de5859b371
|
@ -9,29 +9,8 @@
|
||||||
|
|
||||||
CConfiguration g_Config;
|
CConfiguration g_Config;
|
||||||
|
|
||||||
class CConfig : public IConfig
|
void EscapeParam(char *pDst, const char *pSrc, int size)
|
||||||
{
|
{
|
||||||
IStorage *m_pStorage;
|
|
||||||
IConsole *m_pConsole;
|
|
||||||
IOHANDLE m_ConfigFile;
|
|
||||||
int m_FlagMask;
|
|
||||||
|
|
||||||
struct CCallback
|
|
||||||
{
|
|
||||||
SAVECALLBACKFUNC m_pfnFunc;
|
|
||||||
void *m_pUserData;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
MAX_CALLBACKS = 16
|
|
||||||
};
|
|
||||||
|
|
||||||
CCallback m_aCallbacks[MAX_CALLBACKS];
|
|
||||||
int m_NumCallbacks;
|
|
||||||
|
|
||||||
void EscapeParam(char *pDst, const char *pSrc, int size)
|
|
||||||
{
|
|
||||||
for(int i = 0; *pSrc && i < size - 1; ++i)
|
for(int i = 0; *pSrc && i < size - 1; ++i)
|
||||||
{
|
{
|
||||||
if(*pSrc == '"' || *pSrc == '\\') // escape \ and "
|
if(*pSrc == '"' || *pSrc == '\\') // escape \ and "
|
||||||
|
@ -39,10 +18,10 @@ class CConfig : public IConfig
|
||||||
*pDst++ = *pSrc++;
|
*pDst++ = *pSrc++;
|
||||||
}
|
}
|
||||||
*pDst = 0;
|
*pDst = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Con_SaveConfig(IConsole::IResult *pResult, void *pUserData)
|
static void Con_SaveConfig(IConsole::IResult *pResult, void *pUserData)
|
||||||
{
|
{
|
||||||
char aFilename[128];
|
char aFilename[128];
|
||||||
if(pResult->NumArguments())
|
if(pResult->NumArguments())
|
||||||
str_format(aFilename, sizeof(aFilename), "configs/%s.cfg", pResult->GetString(0));
|
str_format(aFilename, sizeof(aFilename), "configs/%s.cfg", pResult->GetString(0));
|
||||||
|
@ -53,21 +32,19 @@ class CConfig : public IConfig
|
||||||
str_format(aFilename, sizeof(aFilename), "configs/config_%s.cfg", aDate);
|
str_format(aFilename, sizeof(aFilename), "configs/config_%s.cfg", aDate);
|
||||||
}
|
}
|
||||||
((CConfig*)pUserData)->Save(aFilename);
|
((CConfig*)pUserData)->Save(aFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
CConfig::CConfig()
|
||||||
|
{
|
||||||
CConfig()
|
|
||||||
{
|
|
||||||
m_pStorage = 0;
|
m_pStorage = 0;
|
||||||
m_pConsole = 0;
|
m_pConsole = 0;
|
||||||
m_ConfigFile = 0;
|
m_ConfigFile = 0;
|
||||||
m_FlagMask = 0;
|
m_FlagMask = 0;
|
||||||
m_NumCallbacks = 0;
|
m_NumCallbacks = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Init(int FlagMask)
|
void CConfig::Init(int FlagMask)
|
||||||
{
|
{
|
||||||
m_pStorage = Kernel()->RequestInterface<IStorage>();
|
m_pStorage = Kernel()->RequestInterface<IStorage>();
|
||||||
m_pConsole = Kernel()->RequestInterface<IConsole>();
|
m_pConsole = Kernel()->RequestInterface<IConsole>();
|
||||||
m_FlagMask = FlagMask;
|
m_FlagMask = FlagMask;
|
||||||
|
@ -75,10 +52,10 @@ public:
|
||||||
|
|
||||||
if(m_pConsole)
|
if(m_pConsole)
|
||||||
m_pConsole->Register("save_config", "?s", CFGFLAG_SERVER|CFGFLAG_CLIENT|CFGFLAG_STORE, Con_SaveConfig, this, "Save config to file");
|
m_pConsole->Register("save_config", "?s", CFGFLAG_SERVER|CFGFLAG_CLIENT|CFGFLAG_STORE, Con_SaveConfig, this, "Save config to file");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Reset()
|
void CConfig::Reset()
|
||||||
{
|
{
|
||||||
#define MACRO_CONFIG_INT(Name,ScriptName,def,min,max,flags,desc) g_Config.m_##Name = def;
|
#define MACRO_CONFIG_INT(Name,ScriptName,def,min,max,flags,desc) g_Config.m_##Name = def;
|
||||||
#define MACRO_CONFIG_STR(Name,ScriptName,len,def,flags,desc) str_copy(g_Config.m_##Name, def, len);
|
#define MACRO_CONFIG_STR(Name,ScriptName,len,def,flags,desc) str_copy(g_Config.m_##Name, def, len);
|
||||||
|
|
||||||
|
@ -86,10 +63,10 @@ public:
|
||||||
|
|
||||||
#undef MACRO_CONFIG_INT
|
#undef MACRO_CONFIG_INT
|
||||||
#undef MACRO_CONFIG_STR
|
#undef MACRO_CONFIG_STR
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void RestoreStrings()
|
void CConfig::RestoreStrings()
|
||||||
{
|
{
|
||||||
#define MACRO_CONFIG_INT(Name,ScriptName,def,min,max,flags,desc) // nop
|
#define MACRO_CONFIG_INT(Name,ScriptName,def,min,max,flags,desc) // nop
|
||||||
#define MACRO_CONFIG_STR(Name,ScriptName,len,def,flags,desc) if(!g_Config.m_##Name[0] && def[0]) str_copy(g_Config.m_##Name, def, len);
|
#define MACRO_CONFIG_STR(Name,ScriptName,len,def,flags,desc) if(!g_Config.m_##Name[0] && def[0]) str_copy(g_Config.m_##Name, def, len);
|
||||||
|
|
||||||
|
@ -97,10 +74,10 @@ public:
|
||||||
|
|
||||||
#undef MACRO_CONFIG_INT
|
#undef MACRO_CONFIG_INT
|
||||||
#undef MACRO_CONFIG_STR
|
#undef MACRO_CONFIG_STR
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Save(const char *pFilename)
|
void CConfig::Save(const char *pFilename)
|
||||||
{
|
{
|
||||||
if(!m_pStorage)
|
if(!m_pStorage)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -135,23 +112,23 @@ public:
|
||||||
str_format(aBuf, sizeof(aBuf), "saved config to '%s'", pFilename);
|
str_format(aBuf, sizeof(aBuf), "saved config to '%s'", pFilename);
|
||||||
m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "config", aBuf);
|
m_pConsole->Print(IConsole::OUTPUT_LEVEL_STANDARD, "config", aBuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void RegisterCallback(SAVECALLBACKFUNC pfnFunc, void *pUserData)
|
void CConfig::RegisterCallback(SAVECALLBACKFUNC pfnFunc, void *pUserData)
|
||||||
{
|
{
|
||||||
dbg_assert(m_NumCallbacks < MAX_CALLBACKS, "too many config callbacks");
|
dbg_assert(m_NumCallbacks < MAX_CALLBACKS, "too many config callbacks");
|
||||||
m_aCallbacks[m_NumCallbacks].m_pfnFunc = pfnFunc;
|
m_aCallbacks[m_NumCallbacks].m_pfnFunc = pfnFunc;
|
||||||
m_aCallbacks[m_NumCallbacks].m_pUserData = pUserData;
|
m_aCallbacks[m_NumCallbacks].m_pUserData = pUserData;
|
||||||
m_NumCallbacks++;
|
m_NumCallbacks++;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void WriteLine(const char *pLine)
|
void CConfig::WriteLine(const char *pLine)
|
||||||
{
|
{
|
||||||
if(!m_ConfigFile)
|
if(!m_ConfigFile)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
io_write(m_ConfigFile, pLine, str_length(pLine));
|
io_write(m_ConfigFile, pLine, str_length(pLine));
|
||||||
io_write_newline(m_ConfigFile);
|
io_write_newline(m_ConfigFile);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
IConfig *CreateConfig() { return new CConfig; }
|
IConfig *CreateConfig() { return new CConfig; }
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#ifndef ENGINE_SHARED_CONFIG_H
|
#ifndef ENGINE_SHARED_CONFIG_H
|
||||||
#define ENGINE_SHARED_CONFIG_H
|
#define ENGINE_SHARED_CONFIG_H
|
||||||
|
|
||||||
|
#include <engine/config.h>
|
||||||
|
|
||||||
struct CConfiguration
|
struct CConfiguration
|
||||||
{
|
{
|
||||||
#define MACRO_CONFIG_INT(Name,ScriptName,Def,Min,Max,Save,Desc) int m_##Name;
|
#define MACRO_CONFIG_INT(Name,ScriptName,Def,Min,Max,Save,Desc) int m_##Name;
|
||||||
|
@ -25,4 +27,37 @@ enum
|
||||||
CFGFLAG_BASICACCESS=64,
|
CFGFLAG_BASICACCESS=64,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CConfig : public IConfig
|
||||||
|
{
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
MAX_CALLBACKS = 16
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CCallback
|
||||||
|
{
|
||||||
|
SAVECALLBACKFUNC m_pfnFunc;
|
||||||
|
void *m_pUserData;
|
||||||
|
};
|
||||||
|
|
||||||
|
class IStorage *m_pStorage;
|
||||||
|
class IConsole *m_pConsole;
|
||||||
|
IOHANDLE m_ConfigFile;
|
||||||
|
int m_FlagMask;
|
||||||
|
CCallback m_aCallbacks[MAX_CALLBACKS];
|
||||||
|
int m_NumCallbacks;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CConfig();
|
||||||
|
|
||||||
|
virtual void Init(int FlagMask);
|
||||||
|
virtual void Reset();
|
||||||
|
virtual void RestoreStrings();
|
||||||
|
virtual void Save(const char *pFilename);
|
||||||
|
|
||||||
|
virtual void RegisterCallback(SAVECALLBACKFUNC pfnFunc, void *pUserData);
|
||||||
|
|
||||||
|
virtual void WriteLine(const char *pLine);
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue