game2006/server/gameserver/mobabattle.h
aozhiwei 7906d5853c 1
2024-01-02 17:39:32 +08:00

93 lines
2.7 KiB
C++

#pragma once
class Room;
class MobaTeam;
class MobaMember;
class Player;
struct BattleDataContext;
class MobaMember
{
public:
void Join(Player* hum);
MobaTeam* GetTeam() { return team_; }
bool IsJoined() { return joined_; }
int GetJoinTime() { return join_time_; }
bool IsView();
const std::string& GetAccountId() { return account_id_; }
const std::string& GetSessionId() { return session_id_; }
const std::string& GetName() { return name_; }
const std::string& GetAvatarUrl() { return avatar_url_; }
int GetHeadFrame() { return head_frame_; }
int GetSex() { return sex_; }
std::shared_ptr<BattleDataContext>& GetNetData() { return battle_context_; };
private:
MobaTeam *team_ = nullptr;
bool joined_ = false;
int join_time_ = 0;
std::string account_id_;
std::string session_id_;
std::string name_;
std::string avatar_url_;
int head_frame_ = 0;
int sex_ = 0;
std::shared_ptr<BattleDataContext> battle_context_;
friend class MobaBattle;
};
class MobaTeam
{
public:
std::string GetTeamUuid() { return team_uuid_; }
int GetMemberNum();
void TraverseMember(std::function<bool (std::shared_ptr<MobaMember>)> cb);
private:
std::string team_uuid_;
bool is_view_ = false;
std::map<std::string, std::shared_ptr<MobaMember>> member_hash_;
friend class MobaBattle;
};
class MobaBattle
{
public:
void Init();
void UnInit();
bool GetParseOk() { return parse_ok_; }
Room* GetRoom() { return room_; }
void SetRoom(Room* room) { room_ = room; }
const std::string& GetRoomUuid() { return room_uuid_; }
const std::string& GetSign() { return sign_; }
const std::shared_ptr<a8::XObject>& GetRawData() { return raw_data_; }
int GetZoneId() { return zone_id_; }
int GetNodeId() { return zone_id_; }
int GetStartTime() { return start_time_; }
void ParseResult(a8::XObject& obj);
std::shared_ptr<MobaTeam> GetTeamByAccountId(const std::string& account_id);
std::shared_ptr<MobaMember> GetMemberByAccountId(const std::string& account_id);
std::shared_ptr<MobaTeam> GetTeamByTeamUuid(const std::string& team_uuid);
int GetMemberNum();
int GetTeamNum();
void TraverseMemberList(std::function<bool (MobaMember*)> func);
void TraverseTeam(std::function<bool (std::shared_ptr<MobaTeam>)> cb);
private:
bool parse_ok_ = false;
Room *room_ = nullptr;
std::string room_uuid_;
int zone_id_ = 0;
int node_id_ = 0;
int start_time_ = 0;
std::string sign_;
std::shared_ptr<a8::XObject> raw_data_;
std::map<std::string, std::shared_ptr<MobaTeam>> uuid_hash_;
std::map<std::string, std::shared_ptr<MobaTeam>> account_hash_;
std::map<std::string, std::shared_ptr<MobaMember>> member_id_hash_;
};