From 3080d505e13ae6a6602dfa0e4b1812b7b1fd2012 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 9 Oct 2020 18:18:13 +0800 Subject: [PATCH] 1 --- server/imserver/guild.cc | 45 ++++++++++++++++++++++++++++++++++++++-- server/imserver/guild.h | 2 ++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 38c73dc..72e93ed 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -1115,9 +1115,7 @@ int Guild::GetMemberNum() void Guild::FillApplyList(const std::string& account_id, cs::MFPaging& paging, cs::SMGuildApplyList& respmsg) { - #if 0 RemoveHandledApply(); - #endif int i = 0; int start = paging.curr_page() * paging.page_size(); for (auto& pair : apply_hash_) { @@ -1306,3 +1304,46 @@ void Guild::GuildRenameCb(int socket_handle, const ss::MFIMMsgConext& context, c respmsg); MarkDirty(); } + +void Guild::RemoveHandledApply() +{ + std::vector handled_idxs; + for (auto& pair : apply_hash_) { + if (GetMember(pair.second->base_data.account_id)) { + handled_idxs.push_back(pair.first); + } + } + for (long long idx : handled_idxs) { + auto itr = apply_hash_.find(idx); + if (itr != apply_hash_.end()) { + auto& apply = itr->second; + DBHelper::Instance()->SetGuildApplyStatus + ( + apply->base_data.account_id, + guild_id_, + kGuildApplyIgnore + ); + delete itr->second; + apply_hash_.erase(itr); + } + } + CombineRepeatApply(); +} + +void Guild::CombineRepeatApply() +{ + std::map> num_hash; + for (auto& pair : apply_hash_) { + auto itr = num_hash.find(pair.second->base_data.account_id); + if (itr != num_hash.end()) { + itr->second.push_back(pair.second); + } else { + num_hash[pair.second->base_data.account_id] = std::vector({pair.second}); + } + } + for (auto& pair : num_hash) { + for (size_t i = 0; i + 1 < pair.second.size(); ++i) { + pair.second[i]->flag = 1; + } + } +} diff --git a/server/imserver/guild.h b/server/imserver/guild.h index 8d3b406..854d7bf 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -67,6 +67,8 @@ private: void QueryMemberOnlineState(); GuildMember* ChooseLeader(std::set* members); void GuildRenameCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildChange& msg); + void RemoveHandledApply(); + void CombineRepeatApply(); private: bool dirty_ = false;