From 951676bcd8bbfe0ecddf1fd0069ffb67e649bab6 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 28 Sep 2020 15:53:47 +0800 Subject: [PATCH] 1 --- server/imserver/constant.h | 3 ++- server/imserver/guild.cc | 23 ++++++++++++++++++++++- server/imserver/guild.h | 3 +++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/server/imserver/constant.h b/server/imserver/constant.h index bf42cbb..c192890 100644 --- a/server/imserver/constant.h +++ b/server/imserver/constant.h @@ -20,7 +20,8 @@ enum GuildJob_e kGuildMember = 0, kGuildOwner = 1, kGuildAdmin = 2, - kGuildElite = 3 + kGuildElite = 3, + kGuildJobMax }; enum InnerMesssage_e diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 2760a97..951e55f 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -38,6 +38,12 @@ void Guild::UnInit() delete pair.second; } apply_hash_.clear(); + for (size_t i = 0; i < job_hash_.size(); ++i) { + if (job_hash_[i]) { + delete job_hash_[i]; + job_hash_[i] = nullptr; + } + } A8_SAFE_DELETE(logdb_); } @@ -482,7 +488,22 @@ void Guild::_CMGuildMemberFire(f8::MsgHdr& hdr, const cs::CMGuildMemberFire& msg int Guild::GetMemberJob(const std::string& account_id) { - return 0; + auto itr = member_job_hash_.find(account_id); + int job = itr != member_job_hash_.end() ? itr->second : kGuildMember; + if (job < kGuildMember || + job > kGuildJobMax) { + return kGuildMember; + } else { + return job; + } +} + +std::set* Guild::GetJobMembers(int job) +{ + if (job < 0 || job > (int)job_hash_.size()) { + return nullptr; + } + return job_hash_[job]; } void Guild::FillGuildBasic(cs::MFGuildBasic* guild_basic) diff --git a/server/imserver/guild.h b/server/imserver/guild.h index e4dd5cd..ed21289 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -31,6 +31,7 @@ public: long long GuildId() { return guild_id_; } int GetMemberJob(const std::string& account_id); + std::set* GetJobMembers(int job); private: bool IsFull(); @@ -61,6 +62,8 @@ private: std::vector sorted_members_; ss::MFGuildLogDB* logdb_ = nullptr; std::map apply_hash_; + std::map member_job_hash_; + std::array*, kGuildJobMax> job_hash_ = {}; int gameid_ = 0; long long guild_id_ = 0;