user.h 1.39 KB
#pragma once

#include <common.h>
#include <share_msg.pb.h>
#include "pet.h"

class gateway_t;
class room_service_t;
struct  room_t;
class user_t
{
public:
	user_t();
	virtual ~user_t();
	// 用户是否机器人 	
	bool is_robot();
	gateway_t* gateway;
	share_msg::user_show_t user_show;
	pet_mgr_t pet_mgr;
	room_t* room;
	USER_ID uid();

	void send_msg(CMD_ID cmd_id, google::protobuf::Message* msg, uint32_t seq = 0);

	void kaichang(user_t* user_def, share_msg::btl_round_t* out_btl_round);

	void xianfa(user_t* user_def, share_msg::btl_round_t* out_btl_round);

	void zhudong(user_t* user_def, share_msg::btl_round_t* out_btl_round);
};


class user_mgr_t
{
public:
	user_mgr_t(){}

	std::map<USER_ID, user_t*> user_map;//key:user_id, val:user_t*

	user_t* find( USER_ID uid );
	user_t* add_user(USER_ID uid, gateway_t* gateway);

	//delete user, erase from user_map
	void del_user(USER_ID uid);
};

extern user_mgr_t* g_user_mgr;


struct room_t{
	std::vector<user_t*> user_vec;
	user_t* ack(){
		return this->user_vec[0];
	}
	user_t* def(){
		return this->user_vec[1];
	}
	// 每回合发牌前,更新一次buf [2019/3/5 Administrator]
	void round_update_buf(user_t* user, share_msg::btl_round_t* out_btl_round);
	// 更新死亡, 将死亡的移除列表 [2019/3/7 Administrator]
	void del_die();
	// 更新死亡宠物,位置 [2019/3/5 Administrator]
	void update_room_pets(share_msg::btl_ack_t* out_btl_ack);
};