gauthd
 
Loading...
Searching...
No Matches
D:/pwsrc2.0/docs/gauthd/userlogout.hpp
Go to the documentation of this file.
1
6
7#ifndef __GNET_USERLOGOUT_HPP
8#define __GNET_USERLOGOUT_HPP
9
10#include "rpcdefs.h"
11#include "callid.hxx"
12#include "state.hxx"
13#include "gmysqlclient.hpp"
14#include "userlogoutarg"
15#include "userlogoutres"
16
17namespace GNET
18{
19
27class UserLogout : public Rpc
28{
29#define RPC_BASECLASS Rpc
30 #include "userlogout"
31#undef RPC_BASECLASS
32
33public:
48 void Server(Rpc::Data *argument, Rpc::Data *result, Manager *manager, Manager::Session::ID sid)
49 {
50 UserLogoutArg *arg = static_cast<UserLogoutArg*>(argument);
51 UserLogoutRes *res = static_cast<UserLogoutRes*>(result);
52
53 // Работа с базой данных
55 const char zoneid = db->GetZoneid();
56 const int zonelocalsid = arg->localsid;
57 int overwrite = 1;
58
59 // Обновление статуса пользователя
60 db->AlexAddLogin(arg->userid, 2);
61 db->OnfflineRecord(arg->userid, db->GetAid(), zoneid, zonelocalsid, overwrite);
62 db->AlexShell(arg->userid);
63
64 // Обработка результата операции
65 res->retcode = (overwrite == 1) ? 0 : 12;
66
67 // Обновление карты пользователей в AuthServer
69 Thread::RWLock::WRScoped l(ausm->locker_map);
70 auto it = ausm->usermap.find(arg->userid);
71 if (it != ausm->usermap.end()) {
72 ausm->usermap.erase(it);
73 }
74 }
75
87 void Client(Rpc::Data *argument, Rpc::Data *result, Manager *manager, Manager::Session::ID sid)
88 {
89 // TODO: Реализация клиентской части
90 // UserLogoutArg *arg = static_cast<UserLogoutArg*>(argument);
91 // UserLogoutRes *res = static_cast<UserLogoutRes*>(result);
92 }
93
101 {
102 // TODO: Реализация обработки таймаута
103 }
104};
105
106} // namespace GNET
107
108#endif // __GNET_USERLOGOUT_HPP
Основной класс для работы с MySQL базой данных
bool AlexShell(int uid)
Выполнение shell-команды при выходе пользователя
bool OnfflineRecord(int uid, char aid, char &zoneid, int &zonelocalid, int &overwrite)
Запись информации о выходе пользователя из онлайн
char GetAid()
Получить ID приложения
static GMysqlClient * GetInstance()
Получить экземпляр класса (Singleton)
bool AlexAddLogin(int uid, int action)
Логирование действия входа/выхода (специальный функционал)
char GetZoneid()
Получить ID зоны
Main authentication server class handling sessions and user validation.
Thread::RWLock locker_map
Блокировка для доступа к usermap.
static GAuthServer * GetInstance()
Получить экземпляр синглтона.
UserMap usermap
Контейнер с данными пользователей.
RPC-класс для обработки запросов выхода пользователя
void Server(Rpc::Data *argument, Rpc::Data *result, Manager *manager, Manager::Session::ID sid)
Обработка запроса выхода пользователя на стороне сервера
void Client(Rpc::Data *argument, Rpc::Data *result, Manager *manager, Manager::Session::ID sid)
Обработка запроса выхода на стороне клиента (заглушка)
void OnTimeout()
Обработчик таймаута RPC-запроса
MySQL клиент для работы с базой данных игрового сервера
Основное пространство имен для сетевых компонентов системы.