l2-unlegits/L2C_Server/datatables/CharNameTable.cpp
2012-02-01 05:25:08 +00:00

95 lines
2.0 KiB
C++

#include "pch.h"
#include "CharNameTable.h"
#include "GS.h"
#include "Log.h"
CharNameTable *CharNameTable::s_instance = NULL;
int CharNameTable::s_refCount = 0;
CharNameTable *CharNameTable::getInstance()
{
if( !s_instance )
{
s_instance = new CharNameTable();
s_refCount++;
}
return s_instance;
}
void CharNameTable::freeInstance()
{
if( s_instance == NULL ) return;
s_refCount--;
if( s_refCount == 0 )
{
delete s_instance;
s_instance = NULL;
}
}
CharNameTable::CharNameTable()
{
//
}
CharNameTable::~CharNameTable()
{
//
}
void CharNameTable::LockDB()
{
m_lock.Lock();
}
void CharNameTable::UnlockDB()
{
m_lock.Unlock();
}
bool CharNameTable::doesCharNameExist( const wchar_t *charName )
{
bool ret = true;
m_lock.Lock();
{
GameServer *gs = GameServer::getInstance();
MysqlConnection *con = gs->getDBConnection();
MysqlQuery q;
q.create( L"SELECT account_name FROM characters WHERE char_name='%s'", charName );
if( con->executeQuery( q ) )
{
int num_chars = q.getNumRows();
assert( num_chars >= 0 );
if( num_chars == 0 ) ret = false;
}
else
LogError( L"CharNameTable::doesCharNameExist(): MySQL ERROR: %s\n", con->getErrorStr() );
gs->releaseDBConnection( con );
}
m_lock.Unlock();
return ret;
}
int CharNameTable::getAccountCharCount( const wchar_t *accountName )
{
if( !accountName ) return 0;
// SELECT COUNT(char_name) FROM characters WHERE account_name=?
int num_chars = 0;
m_lock.Lock();
{
GameServer *gs = GameServer::getInstance();
MysqlConnection *con = gs->getDBConnection();
MysqlQuery q;
q.create( L"SELECT COUNT(char_name) FROM characters WHERE account_name='%s'", accountName );
if( con->executeQuery( q ) )
{
if( q.getNextRow() ) num_chars = q.getFieldInt( 0 );
}
else
LogError( L"CharNameTable::getAccountCharCount(): MySQL ERROR: %s\n", con->getErrorStr() );
gs->releaseDBConnection( con );
}
m_lock.Unlock();
return num_chars;
}