relation/server/imserver/groupmgr.cc
2020-12-24 11:43:25 +08:00

238 lines
6.5 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::_CMTeamCreate:
{
cs::CMTeamCreate cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMTeamCreate(msg.context(), cmmsg);
}
break;
case cs::CMMessageId_e::_CMTeamJoin:
{
cs::CMTeamJoin cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMTeamJoin(msg.context(), cmmsg);
}
break;
case cs::CMMessageId_e::_CMTeamAgree:
{
cs::CMTeamAgree cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMTeamAgree(msg.context(), cmmsg);
}
break;
case cs::CMMessageId_e::_CMTeamKick:
{
cs::CMTeamKick cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMTeamKick(msg.context(), cmmsg);
}
break;
case cs::CMMessageId_e::_CMTeamQuit:
{
cs::CMTeamQuit cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMTeamQuit(msg.context(), cmmsg);
}
break;
case cs::CMMessageId_e::_CMTeamDismiss:
{
cs::CMTeamDismiss cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMTeamDismiss(msg.context(), cmmsg);
}
break;
case cs::CMMessageId_e::_CMTeamRename:
{
cs::CMTeamRename cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMTeamRename(msg.context(), cmmsg);
}
break;
default:
{
break;
}
}
}
void GroupMgr::_CMTeamCreate(const ss::MFIMMsgConext& context, const cs::CMTeamCreate& msg)
{
#if 0
Group* group = GetGroup(context.group_id());
if (group) {
cs::SMTeamCreate respmsg;
respmsg.set_errcode(1);
respmsg.set_errmsg(TEXT("groupid_already_exits", "群id已经存在"));
ForwardGroupSMMsg(context, respmsg);
return;
}
#endif
}
void GroupMgr::_CMTeamJoin(const ss::MFIMMsgConext& context, const cs::CMTeamJoin& msg)
{
#if 0
Group* group = GetGroup(msg.group_id());
if (!group) {
cs::SMTeamJoin respmsg;
respmsg.set_errcode(1);
respmsg.set_errmsg(TEXT("groupid_already_exits", "群id已经存在"));
ForwardGroupSMMsg(context, respmsg);
return;
}
GroupMember* member = group->GetMember(context.account_id());
if (member) {
cs::SMTeamJoin respmsg;
ForwardGroupSMMsg(context, respmsg);
return;
}
if (group->IsFull()) {
cs::SMTeamJoin respmsg;
respmsg.set_errcode(2);
respmsg.set_errmsg(TEXT("group_member_upper_limit", "群已满"));
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::_CMTeamAgree(const ss::MFIMMsgConext& context, const cs::CMTeamAgree& msg)
{
#if 0
Group* group = GetGroup(context.group_id());
if (!group) {
return;
}
#endif
}
void GroupMgr::_CMTeamKick(const ss::MFIMMsgConext& context, const cs::CMTeamKick& msg)
{
#if 0
Group* group = GetGroup(context.group_id());
if (!group) {
cs::SMTeamKick respmsg;
respmsg.set_errcode(1);
respmsg.set_errmsg(TEXT("groupid_error", "群id错误"));
ForwardGroupSMMsg(context, respmsg);
return;
}
if (!group->GetMember(msg.account_id())) {
cs::SMTeamKick respmsg;
ForwardGroupSMMsg(context, respmsg);
return;
}
group->RemoveMember(msg.account_id());
cs::SMTeamKick respmsg;
ForwardGroupSMMsg(context, respmsg);
return;
#endif
}
void GroupMgr::_CMTeamQuit(const ss::MFIMMsgConext& context, const cs::CMTeamQuit& msg)
{
#if 0
Group* group = GetGroup(context.group_id());
if (!group) {
cs::SMTeamQuit respmsg;
respmsg.set_errcode(1);
respmsg.set_errmsg(TEXT("groupid_error", "群id错误"));
ForwardGroupSMMsg(context, respmsg);
return;
}
if (!group->GetMember(context.account_id())) {
cs::SMTeamQuit respmsg;
ForwardGroupSMMsg(context, respmsg);
return;
}
group->RemoveMember(context.account_id());
cs::SMTeamQuit respmsg;
ForwardGroupSMMsg(context, respmsg);
#endif
}
void GroupMgr::_CMTeamDismiss(const ss::MFIMMsgConext& context, const cs::CMTeamDismiss& msg)
{
#if 0
Group* group = GetGroup(context.group_id());
if (!group) {
return;
}
#endif
}
void GroupMgr::_CMTeamRename(const ss::MFIMMsgConext& context, const cs::CMTeamRename& msg)
{
#if 0
Group* group = GetGroup(context.group_id());
if (!group) {
cs::SMTeamRename respmsg;
respmsg.set_errcode(1);
respmsg.set_errmsg(TEXT("groupid_error", "群id错误"));
ForwardGroupSMMsg(context, respmsg);
return;
}
GroupMember* member = group->GetMember(context.account_id());
if (!member) {
cs::SMTeamRename respmsg;
respmsg.set_errcode(2);
respmsg.set_errmsg("没有权限");
ForwardGroupSMMsg(context, respmsg);
return;
}
group->RemoveMember(msg.new_group_name());
cs::SMTeamRename 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);
}