238 lines
6.5 KiB
C++
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);
|
|
}
|