Files
Leviathan/Server/GameServer/Game/DaemonProc/GlobalVariableManager.cpp
T
2026-06-01 12:46:52 +02:00

96 lines
1.8 KiB
C++

#include "GlobalVariableManager.h"
#include "DB_Commands.h"
GlobalVariableManager & GlobalVariableManager::Instance()
{
static GlobalVariableManager _instance;
return _instance;
}
GlobalVariableManager::~GlobalVariableManager()
{
KHash< std::string *, hashPr_string >::node * pNode = NULL;
THREAD_SYNCHRONIZE( m_cs );
bool bNodeExist = m_hsGlobalVariable.get_first_node( pNode );
while( bNodeExist )
{
bNodeExist = m_hsGlobalVariable.get_next_node( pNode );
}
}
void GlobalVariableManager::Push( GameDBManager::DBProc* pWork )
{
THREAD_SYNCRONIZE( m_QueryLock );
if( m_qQueryList.empty() )
{
DB().Push( pWork );
}
m_qQueryList.push( pWork );
}
void GlobalVariableManager::onEndQuery()
{
THREAD_SYNCRONIZE( m_QueryLock );
m_qQueryList.pop();
if( !m_qQueryList.empty() )
{
DB().Push( m_qQueryList.front() );
}
}
void GlobalVariableManager::Set( const char * pszName, const char * pszValue, const bool bSkipDBUpdate )
{
THREAD_SYNCHRONIZE( m_cs );
std::string * pStrValue = NULL;
if( m_hsGlobalVariable.lookup( pszName, pStrValue ) )
{
*pStrValue = pszValue;
if( !bSkipDBUpdate )
Push( new DB_UpdateGlobalVariable( pszName, pszValue ) );
}
else
{
pStrValue = new std::string( pszValue );
m_hsGlobalVariable.add( pszName, pStrValue );
if( !bSkipDBUpdate )
Push( new DB_InsertGlobalVariable( pszName, pszValue ) );
}
}
const char * GlobalVariableManager::Get( const char * pszName ) const
{
THREAD_SYNCHRONIZE( m_cs );
std::string * pStrValue = NULL;
if( !m_hsGlobalVariable.lookup( pszName, pStrValue ) )
return NULL;
return pStrValue->c_str();
}
const bool GlobalVariableManager::Delete( const char * pszName )
{
THREAD_SYNCHRONIZE( m_cs );
if( !m_hsGlobalVariable.erase( pszName ) )
{
return false;
}
Push( new DB_DeleteGlobalVariable( pszName ) );
return true;
}