#include "precompile.h" #include "group.h" #include "groupmgr.h" #include "cs_msgid.pb.h" #include "cs_proto.pb.h" #include "ss_proto.pb.h" #include "MSConnMgr.h" void GroupMgr::Init() { } void GroupMgr::UnInit() { } void GroupMgr::_SS_MS_LoadGroup(f8::MsgHdr& hdr, const ss::SS_MS_LoadGroup& msg) { } void GroupMgr::_SS_MS_ForwardGroupCMMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGroupCMMsg& msg) { switch (hdr.msgid) { case cs::CMMessageId_e::_CMGroupCreate: { cs::CMGroupCreate cmmsg; cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); _CMGroupCreate(msg.context(), cmmsg); } break; case cs::CMMessageId_e::_CMGroupJoin: { cs::CMGroupJoin cmmsg; cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); _CMGroupJoin(msg.context(), cmmsg); } break; case cs::CMMessageId_e::_CMGroupAgree: { cs::CMGroupAgree cmmsg; cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); _CMGroupAgree(msg.context(), cmmsg); } break; case cs::CMMessageId_e::_CMGroupKick: { cs::CMGroupKick cmmsg; cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); _CMGroupKick(msg.context(), cmmsg); } break; case cs::CMMessageId_e::_CMGroupQuit: { cs::CMGroupQuit cmmsg; cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); _CMGroupQuit(msg.context(), cmmsg); } break; case cs::CMMessageId_e::_CMGroupDismiss: { cs::CMGroupDismiss cmmsg; cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); _CMGroupDismiss(msg.context(), cmmsg); } break; case cs::CMMessageId_e::_CMGroupRename: { cs::CMGroupRename cmmsg; cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); _CMGroupRename(msg.context(), cmmsg); } break; default: { break; } } } void GroupMgr::_CMGroupCreate(const ss::MFIMMsgConext& context, const cs::CMGroupCreate& msg) { Group* group = GetGroup(context.group_id()); if (group) { cs::SMGroupCreate respmsg; respmsg.set_errcode(1); respmsg.set_errmsg("群id已经存在"); ForwardGroupSMMsg(context, respmsg); return; } } void GroupMgr::_CMGroupJoin(const ss::MFIMMsgConext& context, const cs::CMGroupJoin& msg) { Group* group = GetGroup(msg.group_id()); if (!group) { cs::SMGroupJoin respmsg; respmsg.set_errcode(1); respmsg.set_errmsg("群id已经存在"); ForwardGroupSMMsg(context, respmsg); return; } GroupMember* member = group->GetMember(context.account_id()); if (member) { cs::SMGroupJoin respmsg; ForwardGroupSMMsg(context, respmsg); return; } if (group->IsFull()) { cs::SMGroupJoin respmsg; respmsg.set_errcode(2); respmsg.set_errmsg("群已满"); ForwardGroupSMMsg(context, respmsg); return; } member = new GroupMember(); member->account_id = context.account_id(); member->nickname = context.nickname(); member->avatar_url = context.avatar_url(); member->sex = context.sex(); member->online = 1; member->group_id = group->group_id; member->data_version1 = context.base_data_version(); group->AddMember(member); } void GroupMgr::_CMGroupAgree(const ss::MFIMMsgConext& context, const cs::CMGroupAgree& msg) { Group* group = GetGroup(context.group_id()); if (!group) { return; } } void GroupMgr::_CMGroupKick(const ss::MFIMMsgConext& context, const cs::CMGroupKick& msg) { Group* group = GetGroup(context.group_id()); if (!group) { cs::SMGroupKick respmsg; respmsg.set_errcode(1); respmsg.set_errmsg("群id错误"); ForwardGroupSMMsg(context, respmsg); return; } if (!group->GetMember(msg.account_id())) { cs::SMGroupKick respmsg; ForwardGroupSMMsg(context, respmsg); return; } group->RemoveMember(msg.account_id()); cs::SMGroupKick respmsg; ForwardGroupSMMsg(context, respmsg); return; } void GroupMgr::_CMGroupQuit(const ss::MFIMMsgConext& context, const cs::CMGroupQuit& msg) { Group* group = GetGroup(context.group_id()); if (!group) { cs::SMGroupQuit respmsg; respmsg.set_errcode(1); respmsg.set_errmsg("群id错误"); ForwardGroupSMMsg(context, respmsg); return; } if (!group->GetMember(context.account_id())) { cs::SMGroupQuit respmsg; ForwardGroupSMMsg(context, respmsg); return; } group->RemoveMember(context.account_id()); cs::SMGroupQuit respmsg; ForwardGroupSMMsg(context, respmsg); } void GroupMgr::_CMGroupDismiss(const ss::MFIMMsgConext& context, const cs::CMGroupDismiss& msg) { Group* group = GetGroup(context.group_id()); if (!group) { return; } } void GroupMgr::_CMGroupRename(const ss::MFIMMsgConext& context, const cs::CMGroupRename& msg) { Group* group = GetGroup(context.group_id()); if (!group) { cs::SMGroupRename respmsg; respmsg.set_errcode(1); respmsg.set_errmsg("群id错误"); ForwardGroupSMMsg(context, respmsg); return; } GroupMember* member = group->GetMember(context.account_id()); if (!member) { cs::SMGroupRename respmsg; respmsg.set_errcode(2); respmsg.set_errmsg("没有权限"); ForwardGroupSMMsg(context, respmsg); return; } group->RemoveMember(msg.new_group_name()); cs::SMGroupRename respmsg; ForwardGroupSMMsg(context, respmsg); } Group* GroupMgr::GetGroup(long long group_id) { auto itr = id_hash_.find(group_id); return itr != id_hash_.end() ? itr->second : nullptr; } void GroupMgr::ForwardGroupSMMsg(const ss::MFIMMsgConext& context, const ::google::protobuf::Message& smmsg) { ss::SS_MS_ForwardGroupSMMsg msg; *msg.mutable_context() = context; smmsg.SerializeToString(msg.mutable_payload()); MSConnMgr::Instance()->SendMsg(msg, 0); }