user.h
2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#pragma once
#include <common.h>
#include "event.h"
#include "item.h"
#include "task.h"
#include "sign.h"
#include "achievement.h"
#include "mail.h"
#include "login_reward.h"
#include "pet.h"
#include "btl.h"
#include "lobby.h"
class user_t : public el::lib_timer_base_t
{
public:
user_t(el::lib_tcp_peer_info_t* peer_fd_info);
virtual ~user_t();
el::lib_tcp_peer_info_t* fd_info;
uint32_t commect_sec;//连接的时间
uint32_t platform;
std::string account;//帐号
std::string session;//登录验证时使用的session
std::string token;//登录时token
std::string wx_unionid;//微信用户统一标识
share_msg::user_show_t user_show;
// 上一次领取在线礼包的时间
uint32_t last_get_online_reward_sec;
E_USER_LOGIN_STATUS login_status;//登录状态
event_mgr_t event_mgr;
item_mgr_t item_mgr;
task_mgr_t task_mgr;
sign_mgr_t sign_mgr;
achievement_mgr_t achievement_mgr;
login_reward_mgr_t login_reward_mgr;
mail_mgr_t mail_mgr;
furniture_mgr_t furniture_mgr;
pet_mgr_t pet_mgr;
btl_mgr_t btl_mgr;
lobby_mgr_t lobby_mgr;
uint32_t agent_level;
std::vector<PET_ID> pet_truntable_vec;
uint32_t pet_turntable_key;
USER_ID uid();
std::string nick();
uint32_t head();
uint32_t charm();
EVENT_DATA gen_idx();
bool is_vip_active();
void send_msg(CMD_ID cmd_id, google::protobuf::Message* msg,
uint32_t seq = 0, USER_ID uid = 0);
//给客户端发送回应包
void send_msg_res(google::protobuf::Message* msg);
int send_err(CMD_ID cmd_id, uint32_t ret);
el::lib_timer_t::lib_timer_sec_t* time_out_login_handle;
};
struct user_in_room_reconnect_data_t
{
GAME_ID game_id;
uint32_t time_sec;
user_in_room_reconnect_data_t(){
this->game_id = 0;
this->time_sec = el_async::get_now_sec();
}
};
class user_mgr_t
{
public:
std::map<int, user_t*> user_connected_map;//key:fd信息, val:用户指针(创建,销毁用户使用这里的user_t*)
std::map<USER_ID, user_t*> user_login_complete_map;//key:uid, val:用户信息(只包含登陆完成状态)
std::map<USER_ID, user_in_room_reconnect_data_t> user_in_room_reconnect_map;//key:uid, val:offline time 记录在玩游戏中断线等待重连的玩家UID
//创建一个fd信息的用户
void add_fd_user(el::lib_tcp_peer_info_t* peer_fd_info);
void add_uid_user( USER_ID uid, user_t* user );
user_t* find(USER_ID uid);
user_t* find(int fd);
void offline(int fd, bool is_active_close_peer);
private:
//删除一个fd信息的用户
void del_fd_user(int fd);
};
extern user_mgr_t* g_user_mgr;