8 #ifndef __GNET_GMYSQLCLIENT_HPP
9 #define __GNET_GMYSQLCLIENT_HPP
11 #include <mysql/mysql.h>
15 #include "timersender.h"
31 pthread_mutex_t mysql_mutex;
32 pthread_mutex_t online_mutex;
33 pthread_mutex_t cash_mutex;
34 pthread_mutex_t antibrut_mutex;
54 char logoutshell[1024];
74 ONLINE_USER(
int userid,
int zoneid,
char * login,
int ipaddr)
76 this->userid = userid;
77 this->zoneid = zoneid;
78 this->ipaddr = ipaddr;
79 memset(this->login,0x00,64);
80 memcpy(this->login,login,strlen(login));
83 std::vector <ONLINE_USER> online_user;
107 CASH_USER(
int userid,
int zoneid,
int sn,
int point,
int cash,
char * creatime)
109 this->userid = userid;
110 this->zoneid = zoneid;
114 memset(this->creatime,0x00,20);
115 memcpy(this->creatime,creatime,19);
118 std::vector <CASH_USER> cash_user;
133 ANTIBRUT_USER(
int ip)
139 std::vector <ANTIBRUT_USER> antibrut_user;
151 void Init(
const char * ip,
const int port,
const char * user,
const char * passwd,
const char * db,
const int h);
159 void AlexPatch(
const bool lkmod,
const bool log,
const char * shell);
177 bool MatrixPasswd(
int &uid,
char * login,
char * passwd,
int ipaddr);
179 bool OnlineRecord(
int uid,
char aid,
char &zoneid,
int &zonelocalid,
int &overwrite);
180 bool OnfflineRecord(
int uid,
char aid,
char &zoneid,
int &zonelocalid,
int &overwrite);
183 bool QueryGMPrivilege(
int uid,
char zoneid,
unsigned char * gm_auth,
int &count);
185 bool SetUseCashNow(
int status,
int sn,
int userid,
char * creatime);
187 bool AddCashLog(
int uid,
int zoneid,
int sn,
int aid,
int point,
int cash,
int status,
char * creatime);
199 pthread_mutex_lock(&online_mutex);
200 for (
unsigned int i = 0; i < online_user.size(); i++)
201 if (online_user.at(i).userid == userid) res = i;
202 pthread_mutex_unlock(&online_mutex);
214 pthread_mutex_lock(&online_mutex);
216 online_user.erase(online_user.begin() + idx);
217 pthread_mutex_unlock(&online_mutex);
229 inline int AddUser(
int userid,
int zoneid,
char * login,
int ipaddr)
232 pthread_mutex_lock(&online_mutex);
233 online_user.push_back(ONLINE_USER(userid,zoneid,login,ipaddr));
234 pthread_mutex_unlock(&online_mutex);
247 return &online_user.at(idx);
254 pthread_mutex_lock(&cash_mutex);
256 pthread_mutex_unlock(&cash_mutex);
262 pthread_mutex_lock(&cash_mutex);
263 size = cash_user.size();
264 pthread_mutex_unlock(&cash_mutex);
270 pthread_mutex_lock(&cash_mutex);
271 if( idx >= 0 && idx < cash_user.size() )
273 cash_user.erase(cash_user.begin() + idx);
275 pthread_mutex_unlock(&cash_mutex);
278 inline void AddCashUser(
int userid,
int zoneid,
int sn,
int point,
int cash,
char * creatime)
280 pthread_mutex_lock(&cash_mutex);
282 cash_user.push_back(CASH_USER( userid,zoneid,sn,point,cash,creatime));
283 pthread_mutex_unlock(&cash_mutex);
289 pthread_mutex_lock(&cash_mutex);
290 for (
unsigned int i = 0; i < cash_user.size(); i++)
291 if (cash_user.at(i).userid == userid) res = i;
292 pthread_mutex_unlock(&cash_mutex);
298 pthread_mutex_lock(&cash_mutex);
299 if ( idx >= 0 && idx < cash_user.size() )
301 userid = cash_user.at(idx).userid;
302 zoneid = cash_user.at(idx).zoneid;
304 pthread_mutex_unlock(&cash_mutex);
309 char * creatime = NULL;
310 pthread_mutex_lock(&cash_mutex);
311 if( idx >= 0 && idx < cash_user.size() )
312 creatime = cash_user.at(idx).creatime;
313 pthread_mutex_unlock(&cash_mutex);
320 pthread_mutex_lock(&cash_mutex);
321 if( idx >= 0 && idx < cash_user.size() )
322 res = cash_user.at(idx).cash;
323 pthread_mutex_unlock(&cash_mutex);
330 pthread_mutex_lock(&cash_mutex);
331 if( idx >= 0 && idx < cash_user.size() )
332 res = cash_user.at(idx).point;
333 pthread_mutex_unlock(&cash_mutex);
340 pthread_mutex_lock(&antibrut_mutex);
341 antibrut_user.clear();
342 pthread_mutex_unlock(&antibrut_mutex);
348 pthread_mutex_lock(&antibrut_mutex);
349 res = antibrut_user.size();
350 pthread_mutex_unlock(&antibrut_mutex);
357 pthread_mutex_lock(&antibrut_mutex);
358 for (
unsigned int i = 0; i < antibrut_user.size(); i++)
359 if (antibrut_user.at(i).ip == ip) res = i;
360 pthread_mutex_unlock(&antibrut_mutex);
367 pthread_mutex_lock(&antibrut_mutex);
369 antibrut_user.erase(antibrut_user.begin() + idx);
370 pthread_mutex_unlock(&antibrut_mutex);
378 pthread_mutex_lock(&antibrut_mutex);
380 res = ++antibrut_user.at(idx).count;
382 antibrut_user.push_back(ANTIBRUT_USER(ip));
383 pthread_mutex_unlock(&antibrut_mutex);
388 inline int ATOI(
const char * ptr)
398 if(in[0] ==
'0' && in[1] ==
'x') in += 2;
399 for(
int i = 0; i < 16; ++i)
401 sscanf(&in[i*2],
"%02x", &nt);
410 in.replace(auth, strlen(auth));
411 Base64Decoder::Convert(out, in);
412 memcpy(passwd,out.begin(),16);
430 memcpy(passwd,auth,16);
452 for (
int i = 0; i < size && i < 32; i++)
454 if( !(login[i] >=
'0' && login[i] <=
'9') &&
455 !(login[i] >=
'A' && login[i] <=
'Z') &&
456 !(login[i] >=
'a' && login[i] <=
'z') )
469 unsigned char bytes[4];
470 bytes[0] = ip & 0xFF;
471 bytes[1] = (ip >> 8) & 0xFF;
472 bytes[2] = (ip >> 16) & 0xFF;
473 bytes[3] = (ip >> 24) & 0xFF;
474 sprintf(address,
"%d.%d.%d.%d", bytes[3], bytes[2], bytes[1], bytes[0]);
Основной класс для работы с MySQL базой данных
void DelCashUser(int idx)
bool DelUseCashNow(int status, int uid, int sn)
Удаление записи из usecashnow.
bool AddCashLog(int uid, int zoneid, int sn, int aid, int point, int cash, int status, char *creatime)
Добавление записи в лог операций с наличностью
void Init(const char *ip, const int port, const char *user, const char *passwd, const char *db, const int h)
Инициализация параметров подключения
void AlexPatch(const bool lkmod, const bool log, const char *shell)
Дополнительные настройки
bool GetUseCashNow(int status, int &count)
Получение записей usecashnow по статусу
ONLINE_USER * GetUserData(int userid)
Получить данные пользователя
bool MysqlQuery(char *ptr, size_t len)
Выполнить SQL запрос
void AddrToStr(unsigned int ip, char *address)
Преобразование IP адреса в строку
bool DeleteErrorRow(int status, int uid, char *creatime)
Удаление ошибочных записей из таблицы usecashnow.
bool ClearOnlineRecord(char zoneid, char aid)
Очистка онлайн-записей для указанной зоны и аккаунта
bool AlexShell(int uid)
Выполнение shell-команды при выходе пользователя
bool ValidLogin(char *login, int size)
Проверка валидности логина
bool AuthPasswd(char *passwd, char *auth)
Преобразование аутентификационных данных
static GMysqlClient * instance
Единственный экземпляр класса
bool Connect()
Установить соединение с БД
void Disconnect()
Разорвать соединение с БД
bool IsActive()
Проверить активность соединения
bool OnfflineRecord(int uid, char aid, char &zoneid, int &zonelocalid, int &overwrite)
Запись информации о выходе пользователя из онлайн
void GetAllCashUser(int idx, int &userid, int &zoneid)
bool SetUseCashNow(int status, int sn, int userid, char *creatime)
Обновление статуса записи в usecashnow.
char GetAid()
Получить ID приложения
bool OnlineRecord(int uid, char aid, char &zoneid, int &zonelocalid, int &overwrite)
Запись информации о входе пользователя в онлайн
int GetCashPoint(int idx)
static GMysqlClient * GetInstance()
Получить экземпляр класса (Singleton)
int DelAntibrutUser(int ip)
bool AlexAddLogin(int uid, int action)
Логирование действия входа/выхода (специальный функционал)
int ATOI(const char *ptr)
bool UserGMPrivilege(int uid, char zoneid, bool &IsGM)
Получение времени создания пользователя в UNIX-формате
void AuthBase64(char *passwd, char *auth)
int GetAntibrutUser(int ip)
int GetUser(int userid)
Найти пользователя по ID.
int AddUser(int userid, int zoneid, char *login, int ipaddr)
Добавить пользователя в онлайн-список
int AddAntibrutUser(int ip)
void AddCashUser(int userid, int zoneid, int sn, int point, int cash, char *creatime)
bool UserCreatime(int uid, int ×tamp)
Получение времени создания пользователя в UNIX-формате
char GetZoneid()
Получить ID зоны
int GetCashUser(int userid)
bool MatrixPasswd(int &uid, char *login, char *passwd, int ipaddr)
Проверка учетных данных пользователя.
bool QueryGMPrivilege(int uid, char zoneid, unsigned char *gm_auth, int &count)
Получение списка GM-привилегий пользователя
void Auth0xMD5(char *out, char *in)
int DelUser(int userid)
Удалить пользователя из онлайн-списка
char * GetCashCreaTime(int idx)
Основное пространство имен для сетевых компонентов системы.