diff --git a/server/imserver/constant.h b/server/imserver/constant.h index 034801f..74e2442 100644 --- a/server/imserver/constant.h +++ b/server/imserver/constant.h @@ -15,6 +15,14 @@ enum GuildStatus_e kGuildDismissed = 2 }; +enum GuildJob_e +{ + kGuildMember = 0, + kGuildOwner = 1, + kGuildAdmin = 2, + kGuildElite = 3 +}; + enum InnerMesssage_e { IM_WSProxyDisconnect = 100, @@ -53,6 +61,8 @@ const char* const PROJ_ROOT_FMT = "/data/logs/%s"; const char* const EVENT_FRIEND_AGREE = "friend.agree"; const char* const EVENT_FRIEND_DELETE = "friend.delete"; +const char* const EVENT_GUILD_DELETE = "guild.dismiss"; + const int MAX_INSTANCE_ID = 1023; const int MAX_FRIEND_NUM = 30; diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index ac8234a..240804f 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -43,6 +43,7 @@ void Guild::AddMember(GuildMember* member) abort(); } member_hash_[member->account_id] = member; + GenSortedMembers(); MarkDirty(); if (dirty_timer_) { @@ -55,6 +56,8 @@ void Guild::RemoveMember(const std::string& account_id) GuildMember* member = GetMember(account_id); if (member) { member_hash_.erase(account_id); + A8_SAFE_DELETE(member); + GenSortedMembers(); } MarkDirty(); @@ -114,22 +117,47 @@ void Guild::_CMGuildJoin(int socket_handle, const ss::MFIMMsgConext& context, co void Guild::_CMGuildAgree(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildAgree& msg) { - + cs::SMGuildAgree respmsg; + GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle, context, respmsg); } void Guild::_CMGuildKick(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildKick& msg) { - + cs::SMGuildKick respmsg; + GuildMember* member = GetMember(context.user_info().base_data().account_id()); + if (!member) { + return; + } + GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle, context, respmsg); } void Guild::_CMGuildQuit(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildQuit& msg) { - + cs::SMGuildQuit respmsg; + GuildMember* member = GetMember(context.user_info().base_data().account_id()); + if (!member) { + return; + } + if (member->guild_job == kGuildOwner) { + return; + } + RemoveMember(member->account_id); + GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle, context, respmsg); } void Guild::_CMGuildDismiss(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildDismiss& msg) { - + cs::SMGuildDismiss respmsg; + GuildMember* member = GetMember(context.user_info().base_data().account_id()); + if (!member) { + return; + } + if (member->guild_job != kGuildOwner) { + return; + } + guild_status = kGuildDismissed; + SaveToDB(); + GuildMgr::Instance()->ForwardGuildSMMsg(socket_handle, context, respmsg); } void Guild::_CMGuildRename(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildRename& msg)