forked from metin2/server
189 lines
3.6 KiB
C++
189 lines
3.6 KiB
C++
#include "stdafx.h"
|
|
#include "DBManager.h"
|
|
#include "ClientManager.h"
|
|
|
|
extern std::string g_stLocale;
|
|
|
|
CDBManager::CDBManager()
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
CDBManager::~CDBManager()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
void CDBManager::Initialize()
|
|
{
|
|
for (int i = 0; i < SQL_MAX_NUM; ++i)
|
|
{
|
|
m_mainSQL[i] = NULL;
|
|
m_directSQL[i] = NULL;
|
|
m_asyncSQL[i] = NULL;
|
|
}
|
|
}
|
|
|
|
void CDBManager::Destroy()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
void CDBManager::Clear()
|
|
{
|
|
for (int i = 0; i < SQL_MAX_NUM; ++i)
|
|
{
|
|
if (m_mainSQL[i])
|
|
{
|
|
delete m_mainSQL[i];
|
|
m_mainSQL[i] = NULL;
|
|
}
|
|
|
|
if (m_directSQL[i])
|
|
{
|
|
delete m_directSQL[i];
|
|
m_directSQL[i] = NULL;
|
|
}
|
|
|
|
if (m_asyncSQL[i])
|
|
{
|
|
delete m_asyncSQL[i];
|
|
m_asyncSQL[i] = NULL;
|
|
}
|
|
}
|
|
|
|
Initialize();
|
|
}
|
|
|
|
void CDBManager::Quit()
|
|
{
|
|
for (int i = 0; i < SQL_MAX_NUM; ++i)
|
|
{
|
|
if (m_mainSQL[i])
|
|
m_mainSQL[i]->Quit();
|
|
|
|
if (m_asyncSQL[i])
|
|
m_asyncSQL[i]->Quit();
|
|
|
|
if (m_directSQL[i])
|
|
m_directSQL[i]->Quit();
|
|
}
|
|
}
|
|
|
|
SQLMsg * CDBManager::PopResult()
|
|
{
|
|
SQLMsg * p;
|
|
|
|
for (int i = 0; i < SQL_MAX_NUM; ++i)
|
|
if (m_mainSQL[i] && m_mainSQL[i]->PopResult(&p))
|
|
return p;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
SQLMsg * CDBManager::PopResult(eSQL_SLOT slot)
|
|
{
|
|
SQLMsg * p;
|
|
|
|
if (m_mainSQL[slot] && m_mainSQL[slot]->PopResult(&p))
|
|
return p;
|
|
|
|
return NULL;
|
|
}
|
|
int CDBManager::Connect(int iSlot, const char * db_address, const int db_port, const char * db_name, const char * user, const char * pwd)
|
|
{
|
|
if (db_address == NULL || db_name == NULL)
|
|
return false;
|
|
|
|
if (iSlot < 0 || iSlot >= SQL_MAX_NUM)
|
|
return false;
|
|
|
|
sys_log(0, "CREATING DIRECT_SQL");
|
|
m_directSQL[iSlot] = new CAsyncSQL2;
|
|
if (!m_directSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), true, db_port))
|
|
{
|
|
Clear();
|
|
return false;
|
|
}
|
|
|
|
|
|
sys_log(0, "CREATING MAIN_SQL");
|
|
m_mainSQL[iSlot] = new CAsyncSQL2;
|
|
if (!m_mainSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), false, db_port))
|
|
{
|
|
Clear();
|
|
return false;
|
|
}
|
|
|
|
sys_log(0, "CREATING ASYNC_SQL");
|
|
m_asyncSQL[iSlot] = new CAsyncSQL2;
|
|
if (!m_asyncSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), false, db_port))
|
|
{
|
|
Clear();
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
SQLMsg * CDBManager::DirectQuery(const char * c_pszQuery, int iSlot)
|
|
{
|
|
return m_directSQL[iSlot]->DirectQuery(c_pszQuery);
|
|
}
|
|
|
|
extern CPacketInfo g_query_info;
|
|
extern int g_query_count[2];
|
|
|
|
void CDBManager::ReturnQuery(const char * c_pszQuery, int iType, IDENT dwIdent, void * udata, int iSlot)
|
|
{
|
|
assert(iSlot < SQL_MAX_NUM);
|
|
//sys_log(0, "ReturnQuery %s", c_pszQuery);
|
|
CQueryInfo * p = new CQueryInfo;
|
|
|
|
p->iType = iType;
|
|
p->dwIdent = dwIdent;
|
|
p->pvData = udata;
|
|
|
|
m_mainSQL[iSlot]->ReturnQuery(c_pszQuery, p);
|
|
|
|
//g_query_info.Add(iType);
|
|
++g_query_count[0];
|
|
}
|
|
|
|
void CDBManager::AsyncQuery(const char * c_pszQuery, int iSlot)
|
|
{
|
|
assert(iSlot < SQL_MAX_NUM);
|
|
m_asyncSQL[iSlot]->AsyncQuery(c_pszQuery);
|
|
++g_query_count[1];
|
|
}
|
|
|
|
unsigned int CDBManager::EscapeString(void *to, const void *from, unsigned int length, int iSlot)
|
|
{
|
|
assert(iSlot < SQL_MAX_NUM);
|
|
return mysql_real_escape_string(m_directSQL[iSlot]->GetSQLHandle(), (char *) to, (const char *) from, length);
|
|
}
|
|
|
|
void CDBManager::SetLocale(const char * szLocale)
|
|
{
|
|
const std::string stLocale(szLocale);
|
|
sys_log(0, "SetLocale start" );
|
|
for (int n = 0; n < SQL_MAX_NUM; ++n)
|
|
{
|
|
m_mainSQL[n]->SetLocale(stLocale);
|
|
m_directSQL[n]->SetLocale(stLocale);
|
|
m_asyncSQL[n]->SetLocale(stLocale);
|
|
}
|
|
sys_log(0, "End setlocale %s", szLocale);
|
|
}
|
|
|
|
void CDBManager::QueryLocaleSet()
|
|
{
|
|
for (int n = 0; n < SQL_MAX_NUM; ++n)
|
|
{
|
|
m_mainSQL[n]->QueryLocaleSet();
|
|
m_directSQL[n]->QueryLocaleSet();
|
|
m_asyncSQL[n]->QueryLocaleSet();
|
|
}
|
|
}
|
|
|