1
This commit is contained in:
parent
2295c54556
commit
7e0aec0938
@ -11,3 +11,40 @@ void Group::UnInit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
GroupMember* Group::GetMember(const std::string& account_id)
|
||||
{
|
||||
auto itr = member_hash_.find(account_id);
|
||||
return itr != member_hash_.end() ? itr->second : nullptr;
|
||||
}
|
||||
|
||||
bool Group::IsFull()
|
||||
{
|
||||
return member_hash_.size() < 100;
|
||||
}
|
||||
|
||||
void Group::Rename(const std::string& new_group_name)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Group::AddMember(GroupMember* member)
|
||||
{
|
||||
if (member_hash_.find(member->account_id) != member_hash_.end()) {
|
||||
abort();
|
||||
}
|
||||
member_hash_[member->account_id] = member;
|
||||
}
|
||||
|
||||
void Group::RemoveMember(const std::string& account_id)
|
||||
{
|
||||
GroupMember* member = GetMember(account_id);
|
||||
if (member) {
|
||||
member_hash_.erase(account_id);
|
||||
}
|
||||
}
|
||||
|
||||
void Group::MakrDirty()
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,35 @@
|
||||
#pragma once
|
||||
|
||||
struct GroupMember
|
||||
{
|
||||
std::string account_id;
|
||||
std::string nickname;
|
||||
std::string avatar_url;
|
||||
int sex = 0;
|
||||
int online = 0;
|
||||
long long group_id = 0;
|
||||
int data_version1 = 0;
|
||||
};
|
||||
|
||||
class Group
|
||||
{
|
||||
public:
|
||||
long long group_id = 0;
|
||||
std::string group_name;
|
||||
std::string owner_id;
|
||||
std::string creator_id;
|
||||
int createtime = 0;
|
||||
|
||||
void Init();
|
||||
void UnInit();
|
||||
|
||||
bool IsFull();
|
||||
void Rename(const std::string& new_group_name);
|
||||
GroupMember* GetMember(const std::string& account_id);
|
||||
void AddMember(GroupMember* member);
|
||||
void RemoveMember(const std::string& account_id);
|
||||
void MakrDirty();
|
||||
|
||||
private:
|
||||
std::map<std::string, GroupMember*> member_hash_;
|
||||
};
|
||||
|
@ -1,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -20,7 +22,7 @@ void GroupMgr::_SS_MS_LoadGroup(f8::MsgHdr& hdr, const ss::SS_MS_LoadGroup& msg)
|
||||
|
||||
}
|
||||
|
||||
void GroupMgr::_SS_MS_ForwardGroupMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGroupMsg& msg)
|
||||
void GroupMgr::_SS_MS_ForwardGroupCMMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGroupCMMsg& msg)
|
||||
{
|
||||
switch (hdr.msgid) {
|
||||
case cs::CMMessageId_e::_CMGroupCreate:
|
||||
@ -81,34 +83,141 @@ void GroupMgr::_SS_MS_ForwardGroupMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGr
|
||||
|
||||
void GroupMgr::_CMGroupCreate(const ss::MFIMMsgConext& context, const cs::CMGroupCreate& msg)
|
||||
{
|
||||
Group* group = GetGroup(context.group_id());
|
||||
if (group) {
|
||||
cs::SMGroupCreate respmsg;
|
||||
respmsg.set_error_code(1);
|
||||
respmsg.set_error_msg("群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_error_code(1);
|
||||
respmsg.set_error_msg("群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_error_code(2);
|
||||
respmsg.set_error_msg("群已满");
|
||||
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.data_version1();
|
||||
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_error_code(1);
|
||||
respmsg.set_error_msg("群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_error_code(1);
|
||||
respmsg.set_error_msg("群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_error_code(1);
|
||||
respmsg.set_error_msg("群id错误");
|
||||
ForwardGroupSMMsg(context, respmsg);
|
||||
return;
|
||||
}
|
||||
GroupMember* member = group->GetMember(context.account_id());
|
||||
if (!member) {
|
||||
cs::SMGroupRename respmsg;
|
||||
respmsg.set_error_code(2);
|
||||
respmsg.set_error_msg("没有权限");
|
||||
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);
|
||||
}
|
||||
|
@ -15,7 +15,15 @@ namespace ss
|
||||
{
|
||||
class MFIMMsgConext;
|
||||
class SS_MS_LoadGroup;
|
||||
class SS_MS_ForwardGroupMsg;
|
||||
class SS_MS_ForwardGroupCMMsg;
|
||||
}
|
||||
|
||||
namespace google
|
||||
{
|
||||
namespace protobuf
|
||||
{
|
||||
class Message;
|
||||
}
|
||||
}
|
||||
|
||||
class Group;
|
||||
@ -33,7 +41,7 @@ class GroupMgr : public a8::Singleton<GroupMgr>
|
||||
void UnInit();
|
||||
|
||||
void _SS_MS_LoadGroup(f8::MsgHdr& hdr, const ss::SS_MS_LoadGroup& msg);
|
||||
void _SS_MS_ForwardGroupMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGroupMsg& msg);
|
||||
void _SS_MS_ForwardGroupCMMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGroupCMMsg& msg);
|
||||
|
||||
private:
|
||||
void _CMGroupCreate(const ss::MFIMMsgConext& context, const cs::CMGroupCreate& msg);
|
||||
@ -44,6 +52,10 @@ class GroupMgr : public a8::Singleton<GroupMgr>
|
||||
void _CMGroupDismiss(const ss::MFIMMsgConext& context, const cs::CMGroupDismiss& msg);
|
||||
void _CMGroupRename(const ss::MFIMMsgConext& context, const cs::CMGroupRename& msg);
|
||||
|
||||
Group* GetGroup(long long group_id);
|
||||
void ForwardGroupSMMsg(const ss::MFIMMsgConext& context,
|
||||
const ::google::protobuf::Message& smmsg);
|
||||
|
||||
private:
|
||||
std::map<long long, Group*> id_hash_;
|
||||
};
|
||||
|
@ -38,7 +38,7 @@ void HandlerMgr::RegisterNetMsgHandlers()
|
||||
|
||||
RegisterNetMsgHandler(&mscmsghandler, &PlayerMgr::_SS_MS_PushUserList);
|
||||
RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_LoadGroup);
|
||||
RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_ForwardGroupMsg);
|
||||
RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_ForwardGroupCMMsg);
|
||||
|
||||
RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_SendChatMsg);
|
||||
|
||||
|
@ -65,7 +65,7 @@ void Player::_CMGroupCreate(f8::MsgHdr& hdr, const cs::CMGroupCreate& msg)
|
||||
SendMsg(respmsg);
|
||||
return;
|
||||
}
|
||||
ForwardMsgToMasterServer(hdr, App::Instance()->NewUUID());
|
||||
ForwardGroupCMMsg(hdr, App::Instance()->NewUUID());
|
||||
}
|
||||
|
||||
void Player::_CMGroupJoin(f8::MsgHdr& hdr, const cs::CMGroupJoin& msg)
|
||||
@ -77,7 +77,7 @@ void Player::_CMGroupJoin(f8::MsgHdr& hdr, const cs::CMGroupJoin& msg)
|
||||
SendMsg(respmsg);
|
||||
return;
|
||||
}
|
||||
ForwardMsgToMasterServer(hdr, group_id);
|
||||
ForwardGroupCMMsg(hdr, group_id);
|
||||
}
|
||||
|
||||
void Player::_CMGroupAgree(f8::MsgHdr& hdr, const cs::CMGroupAgree& msg)
|
||||
@ -89,7 +89,7 @@ void Player::_CMGroupAgree(f8::MsgHdr& hdr, const cs::CMGroupAgree& msg)
|
||||
SendMsg(respmsg);
|
||||
return;
|
||||
}
|
||||
ForwardMsgToMasterServer(hdr, group_id);
|
||||
ForwardGroupCMMsg(hdr, group_id);
|
||||
}
|
||||
|
||||
void Player::_CMGroupKick(f8::MsgHdr& hdr, const cs::CMGroupKick& msg)
|
||||
@ -101,7 +101,7 @@ void Player::_CMGroupKick(f8::MsgHdr& hdr, const cs::CMGroupKick& msg)
|
||||
SendMsg(respmsg);
|
||||
return;
|
||||
}
|
||||
ForwardMsgToMasterServer(hdr, group_id);
|
||||
ForwardGroupCMMsg(hdr, group_id);
|
||||
}
|
||||
|
||||
void Player::_CMGroupQuit(f8::MsgHdr& hdr, const cs::CMGroupQuit& msg)
|
||||
@ -113,7 +113,7 @@ void Player::_CMGroupQuit(f8::MsgHdr& hdr, const cs::CMGroupQuit& msg)
|
||||
SendMsg(respmsg);
|
||||
return;
|
||||
}
|
||||
ForwardMsgToMasterServer(hdr, group_id);
|
||||
ForwardGroupCMMsg(hdr, group_id);
|
||||
}
|
||||
|
||||
void Player::_CMGroupDismiss(f8::MsgHdr& hdr, const cs::CMGroupDismiss& msg)
|
||||
@ -125,7 +125,7 @@ void Player::_CMGroupDismiss(f8::MsgHdr& hdr, const cs::CMGroupDismiss& msg)
|
||||
SendMsg(respmsg);
|
||||
return;
|
||||
}
|
||||
ForwardMsgToMasterServer(hdr, group_id);
|
||||
ForwardGroupCMMsg(hdr, group_id);
|
||||
}
|
||||
|
||||
void Player::_CMGroupRename(f8::MsgHdr& hdr, const cs::CMGroupRename& msg)
|
||||
@ -137,7 +137,7 @@ void Player::_CMGroupRename(f8::MsgHdr& hdr, const cs::CMGroupRename& msg)
|
||||
SendMsg(respmsg);
|
||||
return;
|
||||
}
|
||||
ForwardMsgToMasterServer(hdr, group_id);
|
||||
ForwardGroupCMMsg(hdr, group_id);
|
||||
}
|
||||
|
||||
void Player::ReLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg)
|
||||
@ -194,9 +194,9 @@ void Player::FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext)
|
||||
conext->set_msgid(hdr.msgid);
|
||||
}
|
||||
|
||||
void Player::ForwardMsgToMasterServer(f8::MsgHdr& hdr, long long hash_code)
|
||||
void Player::ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code)
|
||||
{
|
||||
ss::SS_IM_ForwardMsg msg;
|
||||
ss::SS_MS_ForwardGroupCMMsg msg;
|
||||
FillIMMsgConext(hdr, msg.mutable_context());
|
||||
if (hdr.buflen > 0) {
|
||||
msg.mutable_payload()->assign(hdr.buf, hdr.buflen);
|
||||
|
@ -55,7 +55,7 @@ private:
|
||||
void AsyncGetFriendList();
|
||||
void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list);
|
||||
void FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext);
|
||||
void ForwardMsgToMasterServer(f8::MsgHdr& hdr, long long hash_code);
|
||||
void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code);
|
||||
|
||||
private:
|
||||
std::map<std::string, Friend> friend_hash_;
|
||||
|
@ -90,24 +90,28 @@ message SMFriendDelete
|
||||
optional string error_msg = 2;
|
||||
}
|
||||
|
||||
//建群
|
||||
message CMGroupCreate
|
||||
{
|
||||
optional string group_name = 1;
|
||||
optional string group_name = 1; //群名称
|
||||
}
|
||||
//建群返回
|
||||
message SMGroupCreate
|
||||
{
|
||||
optional int32 error_code = 1;
|
||||
optional string error_msg = 2;
|
||||
optional int32 error_code = 1; //1:群已存在 2: 你已经有群
|
||||
optional string error_msg = 2; //错误消息
|
||||
}
|
||||
|
||||
//加群
|
||||
message CMGroupJoin
|
||||
{
|
||||
optional int64 group_id = 1;
|
||||
optional int64 group_id = 1; //群id
|
||||
}
|
||||
//加群返回
|
||||
message SMGroupJoin
|
||||
{
|
||||
optional int32 error_code = 1;
|
||||
optional string error_msg = 2;
|
||||
optional int32 error_code = 1; //1:群id不存在 2:群已满
|
||||
optional string error_msg = 2; //错误消息
|
||||
}
|
||||
|
||||
message CMGroupAgree
|
||||
@ -119,13 +123,17 @@ message SMGroupAgree
|
||||
optional string error_msg = 2;
|
||||
}
|
||||
|
||||
//踢人
|
||||
message CMGroupKick
|
||||
{
|
||||
optional string account_id = 1;
|
||||
}
|
||||
|
||||
//踢人回复
|
||||
message SMGroupKick
|
||||
{
|
||||
optional int32 error_code = 1;
|
||||
optional string error_msg = 2;
|
||||
optional int32 error_code = 1; //1:群id错误
|
||||
optional string error_msg = 2; //错误消息
|
||||
}
|
||||
|
||||
message CMGroupQuit
|
||||
|
@ -9,6 +9,8 @@ message MFIMMsgConext
|
||||
optional int32 sex = 5;
|
||||
optional int32 online = 6;
|
||||
optional int32 msgid = 7;
|
||||
optional int64 group_id = 8;
|
||||
optional int32 data_version1 = 9;
|
||||
}
|
||||
|
||||
message SS_WSP_SocketDisconnect
|
||||
@ -75,7 +77,13 @@ message SS_IM_ForwardMsg
|
||||
optional bytes payload = 2;
|
||||
}
|
||||
|
||||
message SS_MS_ForwardGroupMsg
|
||||
message SS_MS_ForwardGroupCMMsg
|
||||
{
|
||||
optional MFIMMsgConext context = 1;
|
||||
optional bytes payload = 2;
|
||||
}
|
||||
|
||||
message SS_MS_ForwardGroupSMMsg
|
||||
{
|
||||
optional MFIMMsgConext context = 1;
|
||||
optional bytes payload = 2;
|
||||
|
@ -63,6 +63,7 @@ DROP TABLE IF EXISTS `group`;
|
||||
CREATE TABLE `group` (
|
||||
`idx` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||
`group_id` bigint NOT NULL COMMENT 'group_id',
|
||||
`group_name` tinyblob COMMENT 'group_name',
|
||||
`owner_id` varchar(60) CHARACTER SET utf8 NOT NULL COMMENT '群主',
|
||||
`creator_id` varchar(60) CHARACTER SET utf8 NOT NULL COMMENT '群创建者',
|
||||
`group_data` mediumblob COMMENT '群数据',
|
||||
|
Loading…
x
Reference in New Issue
Block a user