#pragma once #include #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* 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 member_hash_; std::vector sorted_members_; ss::MFGuildLogDB* logdb_ = nullptr; std::map apply_hash_; std::map member_job_hash_; std::vector> 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); };