diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 9daa483..5e06b99 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -649,6 +649,46 @@ void Guild::_CMGuildDismiss(f8::MsgHdr& hdr, const cs::CMGuildDismiss& msg) cs::SMGuildDismiss respmsg; ss::SS_IM_ForwardGuildCMMsg *forward_msg = (ss::SS_IM_ForwardGuildCMMsg*)hdr.user_data; + GuildMember* sender = GetMember(forward_msg->context().user_info().base_data().account_id()); + if (!sender) { + SendErrorMsg(hdr.socket_handle, forward_msg->context(), TEXT("server_internal_error", "server internal error")); + respmsg.set_errcode(2); + respmsg.set_errmsg(TEXT("server_internal_error", "server internal error")); + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); + return; + } + + if (!( + GetMemberJob(sender->account_id) == kGuildOwner + )) { + SendErrorMsg(hdr.socket_handle, forward_msg->context(), TEXT("permission_denied", "permission denied")); + respmsg.set_errcode(3); + respmsg.set_errmsg(TEXT("permission_denied", "permission denied")); + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); + return; + } + + TraverseMember + ( + [this] (GuildMember* member) + { + SyncHelper::Instance()->SyncGuildMemberQuit + (this, + member->account_id, + member->account_id, + kGuildDismisss); + }); + + guild_status_ = kGuildDismissed; + SaveToDB(); + + GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, + forward_msg->context(), + respmsg); } void Guild::_CMGuildChange(f8::MsgHdr& hdr, const cs::CMGuildChange& msg) diff --git a/server/imserver/guildmgr.cc b/server/imserver/guildmgr.cc index 0ac27b8..c6b363f 100644 --- a/server/imserver/guildmgr.cc +++ b/server/imserver/guildmgr.cc @@ -287,9 +287,10 @@ void GuildMgr::LoadGuild(long long guild_id) " join_unlimited, join_cond1, join_cond2, createtime, channel, " " owner_vip_lv, owner_head, creator_vip_lv, creator_head, " " owner_sex, creator_sex " - "FROM `guild` WHERE guild_id=%d;", + "FROM `guild` WHERE guild_id=%d AND guild_status <> %d;", { - guild_id + guild_id, + kGuildDismissed }, a8::XParams() .SetSender(guild_id),