aozhiwei 16ac5a5163 1
2020-09-29 11:47:36 +08:00

120 lines
4.5 KiB
C++

#pragma once
#include <a8/timer_attacher.h>
#include "cs_proto.pb.h"
#include "ss_proto.pb.h"
struct timer_list;
class Guild
{
public:
enum { HID = HID_Guild };
public:
void Init();
void UnInit();
void _CMGuildInfo(f8::MsgHdr& hdr, const cs::CMGuildInfo& msg);
void _CMGuildJoin(f8::MsgHdr& hdr, const cs::CMGuildJoin& msg);
void _CMGuildAgree(f8::MsgHdr& hdr, const cs::CMGuildAgree& msg);
void _CMGuildKick(f8::MsgHdr& hdr, const cs::CMGuildKick& msg);
void _CMGuildQuit(f8::MsgHdr& hdr, const cs::CMGuildQuit& msg);
void _CMGuildDismiss(f8::MsgHdr& hdr, const cs::CMGuildDismiss& msg);
void _CMGuildChange(f8::MsgHdr& hdr, const cs::CMGuildChange& msg);
void _CMGuildMemberList(f8::MsgHdr& hdr, const cs::CMGuildMemberList& msg);
void _CMGuildApplyList(f8::MsgHdr& hdr, const cs::CMGuildApplyList& msg);
void _CMGuildLog(f8::MsgHdr& hdr, const cs::CMGuildLog& msg);
void _CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob& msg);
long long GuildId() { return guild_id_; }
int GetMemberJob(const std::string& account_id);
std::set<std::string>* GetJobMembers(int job);
int GetJobMemberNum(int job);
private:
bool IsFull();
void MarkDirty();
GuildMember* GetMember(const std::string& account_id);
void AddMember(GuildMember* member);
void RemoveMember(const std::string& sender_id,
const std::string& target_id,
int reason);
void FillGuildBasic(cs::MFGuildBasic* guild_basic);
void FillGuildDB(ss::MFGuildDB& guild_pb);
void SerializeMembers(std::string& guild_members);
void SaveToDB();
void GenSortedMembers();
int GetMemberNum();
void FillApplyList(const std::string& account_id, cs::MFPaging& paging, cs::SMGuildApplyList& respmsg);
void ClearApplyBySenderId(const std::string& sender_id);
void ClearApplyByIdx(long long idx);
void Deserialize(const std::string& guild_data,
const std::string& guild_members,
const std::string& guild_log);
void SendErrorMsg(int sokcet_handle, const ss::MFIMMsgConext& context, const std::string& errmsg);
private:
bool dirty_ = false;
long long last_apply_idx_ = 0;
timer_list* dirty_timer_ = nullptr;
std::map<std::string, GuildMember*> member_hash_;
std::vector<GuildMember*> sorted_members_;
ss::MFGuildLogDB* logdb_ = nullptr;
std::map<long long, GuildApply*> apply_hash_;
std::map<std::string, int> member_job_hash_;
std::vector<std::set<std::string>> job_hash_;
int gameid_ = 0;
long long guild_id_ = 0;
std::string guild_name_;
int guild_lv_ = 0;
int guild_exp_ = 0;
int guild_badge_ = 0;
int guild_apply_num_ = 0;
std::string guild_notice_;
std::string guild_declaration_;
std::string owner_id_;
std::string owner_name_;
std::string owner_avatar_url_;
std::string creator_id_;
std::string creator_name_;
std::string creator_avatar_url_;
int guild_status_ = 0;
int join_unlimited_ = 0;
int join_cond1_ = 0;
int join_cond2_ = 0;
int createtime_ = 0;
a8::TimerAttacher timer_attacher_;
public:
static Guild* CreateGuild(int gameid,
long long guild_id,
const std::string& guild_name,
int guild_lv,
int guild_exp,
int guild_badge,
int guild_apply_num,
const std::string& guild_members,
const std::string& guild_notice,
const std::string& guild_declaration,
const std::string& guild_log,
const std::string& owner_id,
const std::string& owner_name,
const std::string& owner_avatar_url,
const std::string& creator_id,
const std::string& creator_name,
const std::string& creator_avatar_url,
const std::string& guild_data,
int guild_status,
int join_unlimited,
int join_cond1,
int join_cond2,
int createtime
);
static void GenGuildData(Player* hum, long long guild_id, std::string& guild_data);
};