gauthd
 
Loading...
Searching...
No Matches
D:/pwsrc2.0/docs/gauthd/gauthserver.cpp
Go to the documentation of this file.
1
6
7 #include "gmysqlclient.hpp"
8 #include "getaddcashsn.hrp"
9 #include "addcash.hpp"
10 #include "gauthserver.hpp"
11 #include "state.hxx"
12
13 namespace GNET
14 {
15
22 GAuthServer GAuthServer::instance;
23
28 const Protocol::Manager::Session::State* GAuthServer::GetInitState() const
29 {
30 return &state_GAuthServer;
31 }
32
38 void GAuthServer::OnAddSession(Session::ID sid)
39 {
40 //TODO: Add custom logic on session creation
41 SetSidIdx(sid);
42 printf("GAuthServer::OnAddSession %d \n", sid);
43 }
44
50 void GAuthServer::OnDelSession(Session::ID sid)
51 {
52 //TODO: Add custom logic on session deletion
53 Thread::Mutex::Scoped l(locker_zonemap);
54 zonemap.erase(sid);
55 printf("GAuthServer::OnDelSession %d \n", sid);
56 }
57
65 bool GAuthServer::ValidUser(Session::ID sid, int userid)
66 {
67 printf("GAuthServer::ValidUser userid=%d \n", userid);
68 Thread::RWLock::RDScoped l(locker_map);
69 UserMap::iterator it = usermap.find(userid);
70 if (it == usermap.end()) return false;
71 if ((*it).second.sid != sid) return false;
72 return true;
73 }
74
75 //------------------------------------------------------------------------
76 //--GOLD CHECKER IMPLEMENTATION--
77 //------------------------------------------------------------------------
78
83
92 void CheckTimer::CheckAddCashcn()
93 {
96
97 if (db->GetCashSize() > 0)
98 {
99 if (!(clear_time++ % 3))
100 db->ClearCash();
101 return;
102 }
103
104 int sid = aum->GetSidIdx();
105 int count = 0;
106 db->GetUseCashNow(0, count);
107
108 for (int i = 0; i < count; i++)
109 {
110 int userid = 0;
111 int zoneid = 0;
112 db->GetAllCashUser(i, userid, zoneid);
113
114 if (userid > 0)
115 {
116 // Create and process cash request
117 GetAddCashSN CashSN = GetAddCashSN(514, NULL, NULL);
118 GetAddCashSNArg arg;
119 arg.userid = userid;
120 arg.zoneid = zoneid;
121 CashSN.SetArgument(arg);
122 CashSN.SetRequest();
123 CashSN.Process(aum, sid);
124 }
125 else
126 {
127 db->DelCashUser(i);
128 }
129 }
130 }
131
136 void CheckTimer::AntibrutClear()
137 {
138 GMysqlClient *db = GMysqlClient::GetInstance();
139 if (db->SizeAntibrutUser())
140 db->ClearAntibrutUser();
141 }
142
151 {
152 AntibrutClear();
153 CheckAddCashcn();
154 Thread::HouseKeeper::AddTimerTask(this, update_time);
155 }
156
157 }; // namespace GNET
Заголовочный файл, содержащий объявление класса AddCash для обработки протокола добавления средств.
Основной класс для работы с MySQL базой данных
void DelCashUser(int idx)
bool GetUseCashNow(int status, int &count)
Получение записей usecashnow по статусу
void GetAllCashUser(int idx, int &userid, int &zoneid)
static GMysqlClient * GetInstance()
Получить экземпляр класса (Singleton)
void ClearAntibrutUser()
void Run()
Основной метод таймера.
Main authentication server class handling sessions and user validation.
Thread::RWLock locker_map
Блокировка для доступа к usermap.
int GetSidIdx()
Получить индекс аутентификации.
static GAuthServer * GetInstance()
Получить экземпляр синглтона.
Thread::Mutex locker_zonemap
Блокировка для доступа к zonemap.
bool ValidUser(Session::ID sid, int userid)
Проверить валидность пользователя.
ZoneMap zonemap
Контейнер с данными о зонах.
void SetSidIdx(int idx)
Установить индекс аутентификации.
UserMap usermap
Контейнер с данными пользователей.
Заголовочный файл, содержащий определения классов для аутентификации и управления сессиями.
MySQL клиент для работы с базой данных игрового сервера
Основное пространство имен для сетевых компонентов системы.
Protocol::Manager::Session::State state_GAuthServer
Состояние сессии для GAuthServer.