From a7fc4d686600f22361547c8f68bddeb043704169 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 30 Sep 2020 11:45:05 +0800 Subject: [PATCH] 1 --- server/imserver/guild.cc | 39 ++++++++++++++++++++++++++ server/imserver/guild.h | 1 + server/imserver/handlermgr.cc | 2 ++ server/imserver/player.cc | 19 +++++++++++++ server/imserver/player.h | 2 ++ server/tools/protobuild/cs_msgid.proto | 2 ++ server/tools/protobuild/cs_proto.proto | 13 +++++++++ 7 files changed, 78 insertions(+) diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index f0b7e63..cb73a79 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -713,6 +713,45 @@ void Guild::_CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob& SaveToDB(); } +void Guild::_CMGuildAgreeInvite(f8::MsgHdr& hdr, const cs::CMGuildAgreeInvite& msg) +{ + ss::SS_IM_ForwardGuildCMMsg *forward_msg = (ss::SS_IM_ForwardGuildCMMsg*)hdr.user_data; + + cs::SMGuildAgreeInvite respmsg; + GuildMember* member = GetMember(forward_msg->context().user_info().base_data().account_id()); + if (member) { + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); + return; + } + if (IsFull()) { + SendErrorMsg(hdr.socket_handle, forward_msg->context(), "公会人数已达上限"); + respmsg.set_errcode(1); + respmsg.set_errmsg("公会人数已达上限"); + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); + return; + } + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); + + member = new GuildMember(); + TypeConvert::Convert(forward_msg->context().user_info().base_data(), *member); + AddMember(member); + + SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonAgree); + DBHelper::Instance()->SetGuildApplyStatus + ( + forward_msg->context().user_info().base_data().account_id(), + guild_id_, + kGuildApplyAgree + ); + ClearApplyBySenderId(forward_msg->context().user_info().base_data().account_id()); +} + int Guild::GetMemberJob(const std::string& account_id) { auto itr = member_job_hash_.find(account_id); diff --git a/server/imserver/guild.h b/server/imserver/guild.h index 25f4bd8..660ebbe 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -28,6 +28,7 @@ public: void _CMGuildApplyList(f8::MsgHdr& hdr, const cs::CMGuildApplyList& msg); void _CMGuildLog(f8::MsgHdr& hdr, const cs::CMGuildLog& msg); void _CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob& msg); + void _CMGuildAgreeInvite(f8::MsgHdr& hdr, const cs::CMGuildAgreeInvite& msg); long long GuildId() { return guild_id_; } int GetMemberJob(const std::string& account_id); diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index 4bb3ce6..42cbe24 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -121,6 +121,7 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGuildApplyList); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGuildLog); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGuildMemberSetJob); + RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGuildAgreeInvite); RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildInfo); RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildJoin); @@ -134,6 +135,7 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildApplyList); RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildLog); RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildMemberSetJob); + RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildAgreeInvite); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 779355f..8227535 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -37,6 +37,7 @@ void Player::Init() (unsigned char*)myself.base_data.account_id.data(), myself.base_data.account_id.size() ); + user_sign_ = a8::openssl::md5(AccountId()); a8::Timer::Instance()->AddRepeatTimerAndAttach ( 1000 * 3 + (rand() % 3000), @@ -976,6 +977,23 @@ void Player::_CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob ForwardGuildCMMsg(hdr, GuildId()); } +void Player::_CMGuildAgreeInvite(f8::MsgHdr& hdr, const cs::CMGuildAgreeInvite& msg) +{ + cs::SMGuildAgreeInvite respmsg; + if (GuildId() != 0) { + if (GuildId() == msg.guild_id()) { + NotifyUserInfoUpdate(&myself); + SendMsg(respmsg); + } else { + 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) { if (!GetFriendById(msg.context().user_info().base_data().account_id())) { @@ -1294,6 +1312,7 @@ void Player::UpdateGuildData(long long guild_id, int guild_job) void Player::FillSMLogin(cs::SMLogin& respmsg) { FillMFUserInfo(respmsg.mutable_account_info()->mutable_user_info()); + respmsg.mutable_account_info()->set_user_sign(user_sign_); } void Player::FillApplyList(const cs::MFPaging& paging, cs::SMFriendApplyList& respmsg) diff --git a/server/imserver/player.h b/server/imserver/player.h index dc643bd..0d66997 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -117,6 +117,7 @@ class Player void _CMGuildApplyList(f8::MsgHdr& hdr, const cs::CMGuildApplyList& msg); void _CMGuildLog(f8::MsgHdr& hdr, const cs::CMGuildLog& msg); void _CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob& msg); + void _CMGuildAgreeInvite(f8::MsgHdr& hdr, const cs::CMGuildAgreeInvite& msg); void _SS_IM_FriendAgreeRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendAgreeRequest& msg); void _SS_IM_FriendDeleteRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendDeleteRequest& msg); @@ -196,6 +197,7 @@ private: std::map event_hash_; int red_point_flags_ = 0; std::set exclude_account_ids_; + std::string user_sign_; std::map friend_hash_; std::map black_hash_; diff --git a/server/tools/protobuild/cs_msgid.proto b/server/tools/protobuild/cs_msgid.proto index 8a97417..01c7b55 100644 --- a/server/tools/protobuild/cs_msgid.proto +++ b/server/tools/protobuild/cs_msgid.proto @@ -41,6 +41,7 @@ enum CMMessageId_e _CMGuildLog = 243; _CMGuildMemberSetJob = 244; _CMGuildRefuse = 245; + _CMGuildAgreeInvite = 246; _CMGuildMsgEnd = 270; _CMTeamCreate = 301; @@ -89,6 +90,7 @@ enum SMMessageId_e _SMGuildLog = 243; _SMGuildMemberSetJob = 244; _SMGuildRefuse = 245; + _SMGuildAgreeInvite = 246; _SMGuildMsgEnd = 270; _SMTeamCreate = 301; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index c833037..949e44a 100644 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -61,6 +61,7 @@ message MFUserTempCustomData message MFAccountInfo { optional MFUserInfo user_info = 1; //用户数据 + optional string user_sign = 2; //用户签名用于接口确权 } //用户信息 @@ -554,6 +555,18 @@ message SMGuildMemberSetJob repeated MFStringTuple chged_members = 3; //发生职位变更的玩家 values[0]: account_id values[1]: job } +//同意邀请 +message CMGuildAgreeInvite +{ + optional int64 guild_id = 1; //公会id + optional string user_sign = 2; //邀请方签名 +} +message SMGuildAgreeInvite +{ + optional int32 errcode = 1; //错误码 + optional string errmsg = 2; //错误信息 +} + //发送聊天消息 message CMSendChatMsg {