From 16ac5a5163d671e996845cb7ea6d5cee33d64432 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 29 Sep 2020 11:47:36 +0800 Subject: [PATCH] 1 --- server/imserver/guild.cc | 63 +++++++++++++++++++------- server/imserver/guild.h | 2 +- server/imserver/player.cc | 9 +++- server/tools/protobuild/cs_proto.proto | 2 +- 4 files changed, 57 insertions(+), 19 deletions(-) diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 9b2be17..b6abf68 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -26,6 +26,9 @@ enum GuildApplyStatus_e void Guild::Init() { logdb_ = new ss::MFGuildLogDB; + for (size_t i = 0; i < kGuildJobMax; ++i) { + job_hash_.push_back(std::set()); + } } void Guild::UnInit() @@ -38,12 +41,6 @@ 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_); } @@ -160,10 +157,6 @@ void Guild::Deserialize(const std::string& guild_data, } member_job_hash_[account_id] = job; std::set* members = GetJobMembers(job); - if (!members) { - members = new std::set(); - job_hash_[job] = members; - } members->insert(account_id); } } @@ -173,10 +166,6 @@ void Guild::Deserialize(const std::string& guild_data, { member_job_hash_[owner_id_] = kGuildOwner; std::set* members = GetJobMembers(kGuildOwner); - if (!members) { - members = new std::set(); - job_hash_[kGuildOwner] = members; - } members->insert(owner_id_); } } @@ -401,7 +390,7 @@ void Guild::_CMGuildMemberList(f8::MsgHdr& hdr, const cs::CMGuildMemberList& msg TypeConvert::Convert(guild_id_, GetMemberJob(sorted_members_[i]->account_id), *sorted_members_[i], - *p); + *(p->mutable_base_data())); } GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, forward_msg->context(), @@ -527,7 +516,49 @@ void Guild::_CMGuildLog(f8::MsgHdr& hdr, const cs::CMGuildLog& msg) void Guild::_CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob& msg) { + ss::SS_IM_ForwardGuildCMMsg *forward_msg = (ss::SS_IM_ForwardGuildCMMsg*)hdr.user_data; + cs::SMGuildMemberSetJob respmsg; + + if (!IsValidGuildJob(msg.job())) { + SendErrorMsg(hdr.socket_handle, forward_msg->context(), "参数错误"); + respmsg.set_errcode(2); + respmsg.set_errmsg("参数错误"); + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); + return; + } + GuildMember* sender = GetMember(forward_msg->context().user_info().base_data().account_id()); + if (!sender) { + 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; + } + if (GetMemberJob(sender->account_id) != kGuildOwner) { + 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()) { + case kGuildOwner: + { + + } + break; + } + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); } int Guild::GetMemberJob(const std::string& account_id) @@ -547,7 +578,7 @@ std::set* Guild::GetJobMembers(int job) if (!IsValidGuildJob(job)) { return nullptr; } - return job_hash_[job]; + return &job_hash_[job]; } int Guild::GetJobMemberNum(int job) diff --git a/server/imserver/guild.h b/server/imserver/guild.h index 631ff7f..0b5cd22 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -65,7 +65,7 @@ private: ss::MFGuildLogDB* logdb_ = nullptr; std::map apply_hash_; std::map member_job_hash_; - std::array*, kGuildJobMax> job_hash_ = {}; + std::vector> job_hash_; int gameid_ = 0; long long guild_id_ = 0; diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 954b34f..99a0f4f 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -927,7 +927,14 @@ void Player::_CMGuildLog(f8::MsgHdr& hdr, const cs::CMGuildLog& msg) void Player::_CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob& msg) { - + cs::SMGuildMemberSetJob respmsg; + if (GuildId() == 0) { + respmsg.set_errcode(1); + respmsg.set_errmsg("你还没有公会"); + SendMsg(respmsg); + return; + } + ForwardGuildCMMsg(hdr, GuildId()); } void Player::_SS_IM_FriendAgreeRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendAgreeRequest& msg) diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index d779892..12773c4 100644 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -486,7 +486,7 @@ message SMGuildMemberList optional int32 errcode = 1; //错误码 optional string errmsg = 2; //错误信息 optional MFPaging paging = 3; //分页信息 - repeated MFBaseUserData member_list = 4; //公会成员列表 + repeated MFUserInfo member_list = 4; //公会成员列表 } //获取公会申请列表