aozhiwei 9babf4c256 1
2020-09-24 15:41:46 +08:00

89 lines
2.3 KiB
C++

#pragma once
#include <a8/timer_attacher.h>
namespace cs
{
class MFGuildBasic;
class CMGuildInfo;
class CMGuildJoin;
class CMGuildAgree;
class CMGuildKick;
class CMGuildQuit;
class CMGuildDismiss;
class CMGuildRename;
class CMGuildMemberList;
class CMGuildLog;
}
namespace ss
{
class MFIMMsgConext;
class MFGuildLogDB;
}
namespace ss
{
class MFGuildDB;
}
struct timer_list;
class Guild
{
public:
enum { HID = HID_Guild };
public:
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 createtime = 0;
a8::TimerAttacher timer_attacher;
void Init();
void UnInit();
void MarkDirty();
void Deserialize(const std::string& guild_data, const std::string& guild_log);
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 _CMGuildRename(f8::MsgHdr& hdr, const cs::CMGuildRename& msg);
void _CMGuildMemberList(f8::MsgHdr& hdr, const cs::CMGuildMemberList& msg);
void _CMGuildLog(f8::MsgHdr& hdr, const cs::CMGuildLog& msg);
private:
bool IsFull();
GuildMember* GetMember(const std::string& account_id);
void AddMember(GuildMember* member);
void RemoveMember(const std::string& account_id);
void FillGuildBasic(cs::MFGuildBasic* guild_basic);
void FillGuildDB(ss::MFGuildDB& guild_pb);
void SerializeMembers(std::string& guild_members);
void SaveToDB();
void GenSortedMembers();
private:
bool dirty_ = false;
timer_list* dirty_timer_ = nullptr;
std::map<std::string, GuildMember*> member_hash_;
std::vector<GuildMember*> sorted_members_;
ss::MFGuildLogDB* logdb_ = nullptr;
};