From e5c90e26422e22dc786f9e3811d21c1a042189b9 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 25 Sep 2020 14:12:04 +0800 Subject: [PATCH] 1 --- server/imserver/guild.cc | 33 ++++++++++++++++++++++++++ server/imserver/guild.h | 2 ++ server/tools/protobuild/cs_proto.proto | 1 + 3 files changed, 36 insertions(+) diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 35fcf02..c46d803 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -27,6 +27,9 @@ void Guild::UnInit() } member_hash_.clear(); A8_SAFE_DELETE(logdb_); + for (auto& pair : apply_hash_) { + delete pair.second; + } } GuildMember* Guild::GetMember(const std::string& account_id) @@ -168,6 +171,14 @@ void Guild::_CMGuildAgree(f8::MsgHdr& hdr, const cs::CMGuildAgree& msg) GuildMember* member = new GuildMember(); TypeConvert::Convert(forward_msg->context().user_info().base_data(), *member); AddMember(member); + + DBHelper::Instance()->SetGuildApplyStatus + ( + msg.apply().base_data().account_id(), + guild_id, + 1 + ); + ClearApplyBySenderId(msg.apply().base_data().account_id()); } } @@ -520,3 +531,25 @@ void Guild::FillApplyList(const std::string& account_id, cs::MFPaging& paging, c respmsg.mutable_paging()->set__total_page(1); } } + +void Guild::ClearApplyBySenderId(const std::string& sender_id) +{ + std::vector deleted_applys; + for (auto& pair : apply_hash_) { + if (pair.second->base_data.account_id == sender_id) { + deleted_applys.push_back(pair.first); + } + } + for (auto idx : deleted_applys) { + ClearApplyByIdx(idx); + } +} + +void Guild::ClearApplyByIdx(long long idx) +{ + auto itr = apply_hash_.find(idx); + if (itr != apply_hash_.end()) { + delete itr->second; + apply_hash_.erase(itr); + } +} diff --git a/server/imserver/guild.h b/server/imserver/guild.h index b30165b..8547758 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -84,6 +84,8 @@ private: 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); private: bool dirty_ = false; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 384591a..79c4c68 100644 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -390,6 +390,7 @@ message SMGuildJoin //同意加公会 message CMGuildAgree { + optional MFGuildApply apply = 1; //申请信息 } message SMGuildAgree {