238 lines
6.4 KiB
C++
238 lines
6.4 KiB
C++
#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)
|
|
{
|
|
#if 0
|
|
Group* group = GetGroup(context.group_id());
|
|
if (group) {
|
|
cs::SMGroupCreate respmsg;
|
|
respmsg.set_errcode(1);
|
|
respmsg.set_errmsg("群id已经存在");
|
|
ForwardGroupSMMsg(context, respmsg);
|
|
return;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void GroupMgr::_CMGroupJoin(const ss::MFIMMsgConext& context, const cs::CMGroupJoin& msg)
|
|
{
|
|
#if 0
|
|
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);
|
|
#endif
|
|
}
|
|
|
|
void GroupMgr::_CMGroupAgree(const ss::MFIMMsgConext& context, const cs::CMGroupAgree& msg)
|
|
{
|
|
#if 0
|
|
Group* group = GetGroup(context.group_id());
|
|
if (!group) {
|
|
return;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void GroupMgr::_CMGroupKick(const ss::MFIMMsgConext& context, const cs::CMGroupKick& msg)
|
|
{
|
|
#if 0
|
|
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;
|
|
#endif
|
|
}
|
|
|
|
void GroupMgr::_CMGroupQuit(const ss::MFIMMsgConext& context, const cs::CMGroupQuit& msg)
|
|
{
|
|
#if 0
|
|
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);
|
|
#endif
|
|
}
|
|
|
|
void GroupMgr::_CMGroupDismiss(const ss::MFIMMsgConext& context, const cs::CMGroupDismiss& msg)
|
|
{
|
|
#if 0
|
|
Group* group = GetGroup(context.group_id());
|
|
if (!group) {
|
|
return;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void GroupMgr::_CMGroupRename(const ss::MFIMMsgConext& context, const cs::CMGroupRename& msg)
|
|
{
|
|
#if 0
|
|
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);
|
|
#endif
|
|
}
|
|
|
|
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);
|
|
}
|