diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 1a3adeb..00e09a3 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -509,6 +509,55 @@ void Guild::_CMGuildChange(f8::MsgHdr& hdr, const cs::CMGuildChange& msg) respmsg); MarkDirty(); } + + ss::SS_IM_ForwardGuildCMMsg *forward_msg_copy = new ss::SS_IM_ForwardGuildCMMsg; + *forward_msg_copy = *forward_msg; + cs::CMGuildChange* msg_copy = new cs::CMGuildChange; + *msg_copy = msg; + + std::string ip; + int port = 0; + JsonDataMgr::Instance()->GetRankServerConf(ip, port); + + a8::MutableXObject* params = a8::MutableXObject::NewObject(); + params->SetVal("account_id", forward_msg->context().user_info().base_data().account_id()); + params->SetVal("guild_id", guild_id_); + params->SetVal("guild_name", guild_name_); + params->SetVal("guild_declaration", guild_declaration_); + f8::HttpClientPool::Instance()->HttpGet + ( + a8::XParams() + .SetSender(guild_id_) + .SetParam1(forward_msg_copy) + .SetParam2(hdr.socket_handle) + .SetParam3(msg_copy), + [] (a8::XParams& param, a8::XObject& data) + { + ss::SS_IM_ForwardGuildCMMsg *forward_msg_copy = (ss::SS_IM_ForwardGuildCMMsg*)param.param1.GetUserData(); + cs::CMGuildChange* msg_copy = (cs::CMGuildChange*)param.param3.GetUserData(); + Guild* guild = GuildMgr::Instance()->GetGuild(param.sender); + if (guild) { + guild->GuildRenameCb(param.param2, forward_msg_copy->context(), *msg_copy); + } + delete msg_copy; + delete forward_msg_copy; + }, + [] (a8::XParams& param, const std::string& response) + { + ss::SS_IM_ForwardGuildCMMsg *forward_msg_copy = (ss::SS_IM_ForwardGuildCMMsg*)param.param1.GetUserData(); + cs::CMGuildChange* msg_copy = (cs::CMGuildChange*)param.param3.GetUserData(); + Guild* guild = GuildMgr::Instance()->GetGuild(param.sender); + if (guild) { + guild->SendErrorMsg(param.param2, forward_msg_copy->context(), "服务器内部错误"); + } + delete msg_copy; + delete forward_msg_copy; + }, + a8::Format("http://%s:%d/webapp/index.php?c=Guild&a=rename", {ip, port}).c_str(), + *params, + GuildId() + ); + delete params; } void Guild::_CMGuildMemberList(f8::MsgHdr& hdr, const cs::CMGuildMemberList& msg) @@ -1208,3 +1257,32 @@ GuildMember* Guild::ChooseLeader(std::set* members) } return leader; } + +void Guild::GuildRenameCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildChange& msg) +{ + if (msg.has_guild_name()) { + guild_name_ = msg.guild_name(); + } + if (msg.has_guild_badge()) { + guild_badge_ = msg.guild_badge(); + } + if (msg.has_guild_declaration()) { + guild_declaration_ = msg.guild_declaration(); + } + if (msg.has_join_unlimited()) { + join_unlimited_ = msg.join_unlimited(); + } + if (msg.has_join_cond1()) { + join_cond1_ = msg.join_cond1(); + } + if (msg.has_join_cond2()) { + join_cond2_ = msg.join_cond2(); + } + + cs::SMGuildChange respmsg; + FillGuildBasic(respmsg.mutable_info()); + GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle, + context, + respmsg); + MarkDirty(); +} diff --git a/server/imserver/guild.h b/server/imserver/guild.h index ccf7cd2..8d3b406 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -66,6 +66,7 @@ private: void SendErrorMsg(int sokcet_handle, const ss::MFIMMsgConext& context, const std::string& errmsg); void QueryMemberOnlineState(); GuildMember* ChooseLeader(std::set* members); + void GuildRenameCb(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildChange& msg); private: bool dirty_ = false;