Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.76 KB | None | 0 0
  1. DBManager.cpp
  2.  
  3. #include "stdafx.h"
  4. #include "DBManager.h"
  5. #include "ClientManager.h"
  6.  
  7. extern std::string g_stLocale;
  8.  
  9. CDBManager::CDBManager()
  10. {
  11.     Initialize();
  12. }
  13.  
  14. CDBManager::~CDBManager()
  15. {
  16.     Destroy();
  17. }
  18.  
  19. void CDBManager::Initialize()
  20. {
  21.     for (int i = 0; i < SQL_MAX_NUM; ++i)
  22.     {
  23.         m_mainSQL[i] = NULL;
  24.         m_directSQL[i] = NULL;
  25.         m_asyncSQL[i] = NULL;
  26.     }
  27. }
  28.  
  29. void CDBManager::Destroy()
  30. {
  31.     Clear();
  32. }
  33.  
  34. void CDBManager::Clear()
  35. {
  36.     for (int i = 0; i < SQL_MAX_NUM; ++i)
  37.     {
  38.         if (m_mainSQL[i])
  39.         {
  40.             delete m_mainSQL[i];
  41.             m_mainSQL[i] = NULL;
  42.         }
  43.  
  44.         if (m_directSQL[i])
  45.         {
  46.             delete m_directSQL[i];
  47.             m_directSQL[i] = NULL;
  48.         }
  49.  
  50.         if (m_asyncSQL[i])
  51.         {
  52.             delete m_asyncSQL[i];
  53.             m_asyncSQL[i] = NULL;
  54.         }
  55.     }
  56.  
  57.     Initialize();
  58. }
  59.  
  60. void CDBManager::Quit()
  61. {
  62.     for (int i = 0; i < SQL_MAX_NUM; ++i)
  63.     {
  64.         if (m_mainSQL[i])
  65.             m_mainSQL[i]->Quit();
  66.  
  67.         if (m_asyncSQL[i])
  68.             m_asyncSQL[i]->Quit();
  69.  
  70.         if (m_directSQL[i])
  71.             m_directSQL[i]->Quit();
  72.     }
  73. }
  74.  
  75. SQLMsg * CDBManager::PopResult()
  76. {
  77.     SQLMsg * p;
  78.  
  79.     for (int i = 0; i < SQL_MAX_NUM; ++i)
  80.         if (m_mainSQL[i] && m_mainSQL[i]->PopResult(&p))
  81.             return p;
  82.  
  83.     return NULL;
  84. }
  85.  
  86. SQLMsg * CDBManager::PopResult(eSQL_SLOT slot)
  87. {
  88.     SQLMsg * p;
  89.  
  90.     if (m_mainSQL[slot] && m_mainSQL[slot]->PopResult(&p))
  91.             return p;
  92.  
  93.     return NULL;
  94. }
  95. int CDBManager::Connect(int iSlot, const char * db_address, const int db_port, const char * db_name, const char * user, const char * pwd)
  96. {
  97.     if (db_address == NULL || db_name == NULL)
  98.         return false;
  99.  
  100.     if (iSlot < 0 || iSlot >= SQL_MAX_NUM)
  101.         return false;
  102.  
  103.     sys_log(0, "CREATING DIRECT_SQL");
  104.     m_directSQL[iSlot] = new CAsyncSQL2;
  105.     if (!m_directSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), true, db_port))
  106.     {
  107.         Clear();
  108.         return false;
  109.     }
  110.  
  111.  
  112.     sys_log(0, "CREATING MAIN_SQL");
  113.     m_mainSQL[iSlot] = new CAsyncSQL2;
  114.     if (!m_mainSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), false, db_port))
  115.     {
  116.         Clear();
  117.         return false;
  118.     }
  119.  
  120.     sys_log(0, "CREATING ASYNC_SQL");
  121.     m_asyncSQL[iSlot] = new CAsyncSQL2;
  122.     if (!m_asyncSQL[iSlot]->Setup(db_address, user, pwd, db_name, g_stLocale.c_str(), false, db_port))
  123.     {
  124.         Clear();
  125.         return false;
  126.     }
  127.  
  128.     return true;
  129. }
  130.  
  131. SQLMsg * CDBManager::DirectQuery(const char * c_pszQuery, int iSlot)
  132. {
  133.     return m_directSQL[iSlot]->DirectQuery(c_pszQuery);
  134. }
  135.  
  136. extern CPacketInfo g_query_info;
  137. extern int g_query_count[2];
  138.  
  139. void CDBManager::ReturnQuery(const char * c_pszQuery, int iType, IDENT dwIdent, void * udata, int iSlot)
  140. {
  141.     assert(iSlot < SQL_MAX_NUM);
  142.     //sys_log(0, "ReturnQuery %s", c_pszQuery);
  143.     CQueryInfo * p = new CQueryInfo;
  144.  
  145.     p->iType = iType;
  146.     p->dwIdent = dwIdent;
  147.     p->pvData = udata;
  148.  
  149.     m_mainSQL[iSlot]->ReturnQuery(c_pszQuery, p);
  150.  
  151.     //g_query_info.Add(iType);
  152.     ++g_query_count[0];
  153. }
  154.  
  155. void CDBManager::AsyncQuery(const char * c_pszQuery, int iSlot)
  156. {
  157.     assert(iSlot < SQL_MAX_NUM);
  158.     m_asyncSQL[iSlot]->AsyncQuery(c_pszQuery);
  159.     ++g_query_count[1];
  160. }
  161.  
  162. unsigned long CDBManager::EscapeString(void *to, const void *from, unsigned long length, int iSlot)
  163. {
  164.     assert(iSlot < SQL_MAX_NUM);
  165.     return mysql_real_escape_string(m_directSQL[iSlot]->GetSQLHandle(), (char *) to, (const char *) from, length);
  166. }
  167.  
  168. void CDBManager::SetLocale(const char * szLocale)
  169. {
  170.     const std::string stLocale(szLocale);
  171.     sys_log(0, "SetLocale start" );
  172.     for (int n = 0; n < SQL_MAX_NUM; ++n)
  173.     {
  174.         m_mainSQL[n]->SetLocale(stLocale);
  175.         m_directSQL[n]->SetLocale(stLocale);
  176.         m_asyncSQL[n]->SetLocale(stLocale);
  177.     }
  178.     sys_log(0, "End setlocale %s", szLocale);
  179. }
  180.  
  181. void CDBManager::QueryLocaleSet()
  182. {
  183.     for (int n = 0; n < SQL_MAX_NUM; ++n)
  184.     {
  185.         m_mainSQL[n]->QueryLocaleSet();
  186.         m_directSQL[n]->QueryLocaleSet();
  187.         m_asyncSQL[n]->QueryLocaleSet();
  188.     }
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement