From 0848fc51007d69de7643a211c7851e287b46b823 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 24 Dec 2020 20:24:06 +0800 Subject: [PATCH] 1 --- server/imserver/guild.cc | 23 ++++++++++++++ server/imserver/guild.h | 1 + server/imserver/handlermgr.cc | 1 + server/imserver/player.cc | 56 +++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+) diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 5f00bd6..852bced 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -447,6 +447,29 @@ void Guild::_CMGuildGainExp(f8::MsgHdr& hdr, const cs::CMGuildGainExp& msg) respmsg); } +void Guild::_CMGuildSearchMember(f8::MsgHdr& hdr, const cs::CMGuildSearchMember& msg) +{ + ss::SS_IM_ForwardGuildCMMsg *forward_msg = (ss::SS_IM_ForwardGuildCMMsg*)hdr.user_data; + + cs::SMGuildSearchMember respmsg; + GuildMember* member = GetMember(msg.target_id()); + if (member) { + FillGuildBasic(respmsg.mutable_guild_basic()); + auto p = respmsg.mutable_user_info(); + TypeConvert::Convert(guild_id_, + GetMemberJob(member->account_id), + *member, + *(p->mutable_base_data())); + TypeConvert::Convert(member->temp_custom_data, *p->mutable_temp_custom_data()); + } else { + respmsg.set_errcode(1); + respmsg.set_errmsg("还没有公会"); + } + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); +} + void Guild::_CMGuildRefuse(f8::MsgHdr& hdr, const cs::CMGuildRefuse& msg) { ss::SS_IM_ForwardGuildCMMsg *forward_msg = (ss::SS_IM_ForwardGuildCMMsg*)hdr.user_data; diff --git a/server/imserver/guild.h b/server/imserver/guild.h index 38f600f..2f8b461 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -29,6 +29,7 @@ public: void _CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob& msg); void _CMGuildAgreeInvite(f8::MsgHdr& hdr, const cs::CMGuildAgreeInvite& msg); void _CMGuildGainExp(f8::MsgHdr& hdr, const cs::CMGuildGainExp& msg); + void _CMGuildSearchMember(f8::MsgHdr& hdr, const cs::CMGuildSearchMember& msg); long long GuildId() { return guild_id_; } int GuildLv() { return guild_lv_; } diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index 5d69a91..e45d0e1 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -148,6 +148,7 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildMemberSetJob); RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildAgreeInvite); RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildGainExp); + RegisterNetMsgHandler(&guild_msghandler, &Guild::_CMGuildSearchMember); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 44eb40d..a89a750 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -1249,6 +1249,62 @@ void Player::_CMGuildGainExp(f8::MsgHdr& hdr, const cs::CMGuildGainExp& msg) void Player::_CMGuildSearchMember(f8::MsgHdr& hdr, const cs::CMGuildSearchMember& msg) { + auto on_ok = + [] (a8::XParams& param, const f8::DataSet* data_set) + { + f8::MsgHdr* hdr_copy = (f8::MsgHdr*)param.param3.GetUserData(); + Player* hum = PlayerMgr::Instance()->GetPlayerByAccountId(param.sender.GetString()); + if (hum) { + if (data_set->empty()) { + cs::SMGuildSearchMember respmsg; + respmsg.set_errcode(1); + respmsg.set_errmsg("还没有公会"); + hum->SendMsg(respmsg); + } else { + for (auto& row : *data_set) { + long long guild_id = a8::XValue(row[0]); + hum->ForwardGuildCMMsg(*hdr_copy, guild_id); + break; + } + } + } + f8::MsgHdr::Destroy(hdr_copy); + }; + auto on_error = + [] (a8::XParams& param, int error_code, const std::string& error_msg) + { + f8::MsgHdr* hdr_copy = (f8::MsgHdr*)param.param3.GetUserData(); + cs::SMGuildSearchMember respmsg; + respmsg.set_errcode(1); + respmsg.set_errmsg("还没有公会"); + Player* hum = PlayerMgr::Instance()->GetPlayerByAccountId(param.sender.GetString()); + if (hum) { + hum->SendMsg(respmsg); + } + f8::MsgHdr::Destroy(hdr_copy); + }; + + unsigned int crc32_code = a8::openssl::Crc32 + ( + (unsigned char*)msg.target_id().data(), + msg.target_id().size() + ); + f8::MsgHdr* hdr_copy = hdr.Clone(); + a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(crc32_code); + DBEngine::Instance()->ExecAsyncQuery + ( + conn_info, + "SELECT guild_id FROM `user` WHERE account_id='%s';", + {msg.target_id()}, + a8::XParams() + .SetSender(AccountId()) + .SetParam1(hdr.socket_handle) + .SetParam2(msg.target_id()) + .SetParam3(hdr_copy), + on_ok, + on_error, + crc32_code + ); } void Player::_SS_IM_FriendAgreeRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendAgreeRequest& msg)