gauthd
 
Loading...
Searching...
No Matches
D:/pwsrc2.0/docs/gauthd/userlogin.hpp
Go to the documentation of this file.
1
9
10#ifndef __GNET_USERLOGIN_HPP
11#define __GNET_USERLOGIN_HPP
12
13#include "rpcdefs.h"
14#include "callid.hxx"
15#include "state.hxx"
16
17#include "userloginarg"
18#include "userloginres"
19#include "gmysqlclient.hpp"
20#include "gauthserver.hpp"
21#include "kickoutuser.hpp"
22
23namespace GNET
24{
25
35class UserLogin : public Rpc
36{
37#define RPC_BASECLASS Rpc
38 #include "userlogin"
39#undef RPC_BASECLASS
40
63 void Server(Rpc::Data *argument, Rpc::Data *result, Manager *manager, Manager::Session::ID sid)
64 {
65 UserLoginArg *arg = (UserLoginArg *)argument;
66 UserLoginRes *res = (UserLoginRes *)result;
67
69 char zoneid;
70
71 // Блокировка доступа к карте зон
72 {
73 Thread::Mutex::Scoped l(ausm->locker_zonemap);
74 if(ausm->zonemap.find(sid) == ausm->zonemap.end()) return;
75 zoneid = ausm->zonemap[sid];
76 }
77
78 bool IsGM = false;
79 int creatime = 0;
80 char zid = zoneid;
81 int zonelocalsid = arg->localsid;
82 int overwrite = arg->blkickuser;
83
85 // Обновление информации о подключении в БД
86 db->OnlineRecord(arg->userid, db->GetAid(), zid, zonelocalsid, overwrite);
87 db->UserCreatime(arg->userid, creatime);
88 db->UserGMPrivilege(arg->userid, zid, IsGM);
89 db->AlexAddLogin(arg->userid, 1);
90
91 // Проверка согласованности идентификаторов зоны
92 if(zid != zoneid || zonelocalsid != arg->localsid)
93 {
94 printf("UserLogin::Server zid != zoneid || zonelocalsid != arg->localsid \n");
95 }
96
97 // Обработка конфликта сессий с блокировкой записи
98 Thread::RWLock::WRScoped l(ausm->locker_map);
99 if(ausm->usermap.find(arg->userid) != ausm->usermap.end())
100 {
101 if(arg->blkickuser)
102 {
103 // Отправка команды отключения предыдущей сессии
104 ausm->Send(ausm->usermap[arg->userid].sid,
105 KickoutUser(arg->userid, ausm->usermap[arg->userid].localsid));
106 }
107 else
108 {
109 res->retcode = ERR_MULTILOGIN;
110 return;
111 }
112 }
113
114 // Заполнение результата
115 res->retcode = ERR_SUCCESS;
116 res->blIsGM = IsGM;
117 res->func = 0;
118 res->funcparm = 0;
119 res->remain_playtime = creatime;
120 res->free_time_left = 0;
121 res->free_time_end = 0;
122
123 // Обновление информации о пользователе
124 ausm->usermap[arg->userid] = UserInfo(sid, arg->localsid, zoneid);
125
126 DEBUG_PRINT("gauthd::userlogin: user(id=%d,localsid=%d) login successfully from zone %d\n",
127 arg->userid, arg->localsid, zoneid);
128 }
129
138 void Client(Rpc::Data *argument, Rpc::Data *result, Manager *manager, Manager::Session::ID sid)
139 {
140 // TODO: Реализовать клиентскую обработку
141 // UserLoginArg *arg = (UserLoginArg *)argument;
142 // UserLoginRes *res = (UserLoginRes *)result;
143 }
144
151 void OnTimeout()
152 {
153 // TODO: Реализовать обработку таймаутов для клиента
154 }
155};
156
157};
158#endif
Основной класс для работы с MySQL базой данных
char GetAid()
Получить ID приложения
bool OnlineRecord(int uid, char aid, char &zoneid, int &zonelocalid, int &overwrite)
Запись информации о входе пользователя в онлайн
static GMysqlClient * GetInstance()
Получить экземпляр класса (Singleton)
bool AlexAddLogin(int uid, int action)
Логирование действия входа/выхода (специальный функционал)
bool UserGMPrivilege(int uid, char zoneid, bool &IsGM)
Получение времени создания пользователя в UNIX-формате
bool UserCreatime(int uid, int &timestamp)
Получение времени создания пользователя в UNIX-формате
Main authentication server class handling sessions and user validation.
Thread::RWLock locker_map
Блокировка для доступа к usermap.
static GAuthServer * GetInstance()
Получить экземпляр синглтона.
Thread::Mutex locker_zonemap
Блокировка для доступа к zonemap.
ZoneMap zonemap
Контейнер с данными о зонах.
UserMap usermap
Контейнер с данными пользователей.
Протокол для принудительного отключения пользователя от сервера
Класс для обработки процедуры входа пользователя -сервис аутентификации
Definition userlogin.hpp:36
Заголовочный файл, содержащий определения классов для аутентификации и управления сессиями.
MySQL клиент для работы с базой данных игрового сервера
Заголовочный файл класса протокола для принудительного отключения пользователя
Основное пространство имен для сетевых компонентов системы.
Структура для хранения информации о пользователе.