relation/server/imserver/groupmgr.cc
aozhiwei 750a4f65c0 1
2020-06-18 20:05:07 +08:00

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);
}