This commit is contained in:
aozhiwei 2020-09-29 13:56:51 +08:00
parent 6cba6df0f7
commit 1ffc2f4c0e
3 changed files with 102 additions and 22 deletions

View File

@ -69,6 +69,7 @@ enum GuildMemberUpdateReason
{ {
kGuildUpdateReasonJoin = 0, kGuildUpdateReasonJoin = 0,
kGuildUpdateReasonAgree = 1, kGuildUpdateReasonAgree = 1,
kGuildUpdateReasonSetJob = 2,
}; };
const char* const PROJ_NAME_FMT = "friend_imserver"; const char* const PROJ_NAME_FMT = "friend_imserver";

View File

@ -379,17 +379,35 @@ void Guild::_CMGuildMemberList(f8::MsgHdr& hdr, const cs::CMGuildMemberList& msg
if (respmsg.paging().page_size() <= 0) { if (respmsg.paging().page_size() <= 0) {
respmsg.mutable_paging()->set_page_size(10); respmsg.mutable_paging()->set_page_size(10);
} }
AdjustPaging(respmsg.mutable_paging(), sorted_members_.size()); int total_count = 0;
{
for (size_t i = respmsg.paging().curr_page() * respmsg.paging().page_size();
i < sorted_members_.size();
++i) {
GuildMember* member = sorted_members_[i];
if (!msg.member_name().empty() &&
member->nickname.find(msg.member_name()) == std::string::npos) {
continue;
}
++total_count;
}
}
AdjustPaging(respmsg.mutable_paging(), total_count);
for (size_t i = respmsg.paging().curr_page() * respmsg.paging().page_size(); for (size_t i = respmsg.paging().curr_page() * respmsg.paging().page_size();
i < sorted_members_.size(); i < sorted_members_.size();
++i) { ++i) {
GuildMember* member = sorted_members_[i];
if (!msg.member_name().empty() &&
member->nickname.find(msg.member_name()) == std::string::npos) {
continue;
}
if (respmsg.member_list().size() >= respmsg.paging().page_size()) { if (respmsg.member_list().size() >= respmsg.paging().page_size()) {
break; break;
} }
auto p = respmsg.add_member_list(); auto p = respmsg.add_member_list();
TypeConvert::Convert(guild_id_, TypeConvert::Convert(guild_id_,
GetMemberJob(sorted_members_[i]->account_id), GetMemberJob(member->account_id),
*sorted_members_[i], *member,
*(p->mutable_base_data())); *(p->mutable_base_data()));
} }
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
@ -548,32 +566,93 @@ void Guild::_CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob&
respmsg); respmsg);
return; return;
} }
GuildMember* member = GetMember(msg.member_id());
if (!member) {
SendErrorMsg(hdr.socket_handle, forward_msg->context(), "参数错误");
respmsg.set_errcode(3);
respmsg.set_errmsg("参数错误");
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
forward_msg->context(),
respmsg);
return;
}
switch (msg.job()) { int src_job = GetMemberJob(member->account_id);
case kGuildOwner: if (src_job != msg.job()) {
{ {
std::set<std::string>* noraml_members = GetJobMembers(src_job);
noraml_members->erase(member->account_id);
} }
break; switch (msg.job()) {
case kGuildAdmin: case kGuildOwner:
{ {
owner_id_ = member->account_id;
owner_name_ = member->nickname;
owner_avatar_url_ = member->avatar_url;
member_job_hash_[sender->account_id] = kGuildMember;
member_job_hash_[member->account_id] = kGuildOwner;
{
std::set<std::string>* members = GetJobMembers(kGuildOwner);
members->clear();
members->insert(member->account_id);
}
{
std::set<std::string>* members = GetJobMembers(kGuildMember);
members->insert(sender->account_id);
}
{
SyncHelper::Instance()->SyncGuildMemberUpdate(this, sender, kGuildUpdateReasonSetJob);
}
{
auto p = respmsg.add_chged_members();
p->add_values(sender->account_id);
p->add_values(a8::XValue(GetMemberJob(sender->account_id)).GetString());
}
}
break;
case kGuildAdmin:
{
member_job_hash_[member->account_id] = kGuildAdmin;
{
std::set<std::string>* members = GetJobMembers(kGuildAdmin);
for (const std::string& old_member_id : *members) {
GuildMember* old_member = GetMember(old_member_id);
if (old_member) {
member_job_hash_[old_member_id] = kGuildMember;
std::set<std::string>* noraml_members = GetJobMembers(kGuildMember);
noraml_members->insert(old_member_id);
SyncHelper::Instance()->SyncGuildMemberUpdate(this,
old_member,
kGuildUpdateReasonSetJob);
}
}
members->clear();
members->insert(member->account_id);
}
}
break;
case kGuildElite:
{
member_job_hash_[member->account_id] = kGuildElite;
}
break;
default:
{
member_job_hash_[member->account_id] = kGuildMember;
}
break;
} }
break; }
case kGuildElite: {
{ auto p = respmsg.add_chged_members();
p->add_values(member->account_id);
} p->add_values(a8::XValue(GetMemberJob(member->account_id)).GetString());
break; SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonSetJob);
default:
{
}
break;
} }
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
forward_msg->context(), forward_msg->context(),
respmsg); respmsg);
SaveToDB();
} }
int Guild::GetMemberJob(const std::string& account_id) int Guild::GetMemberJob(const std::string& account_id)

View File

@ -479,7 +479,7 @@ message SMGuildRank
message CMGuildMemberList message CMGuildMemberList
{ {
optional MFPaging paging = 1; // optional MFPaging paging = 1; //
optional string member_id = 2; //id optional string member_name = 2; //
} }
message SMGuildMemberList message SMGuildMemberList
{ {