95 lines
2.0 KiB
C++
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;
|
|
}
|