This commit is contained in:
aozhiwei 2020-09-16 17:04:22 +08:00
parent a0c22f7536
commit 268b19d7c2
3 changed files with 26 additions and 21 deletions

View File

@ -5,12 +5,13 @@
#include "cs_msgid.pb.h" #include "cs_msgid.pb.h"
#include "cs_proto.pb.h" #include "cs_proto.pb.h"
#include "ss_proto.pb.h" #include "ss_proto.pb.h"
#include "MSConnMgr.h" #include "IMListener.h"
#include "asynctaskmgr.h" #include "asynctaskmgr.h"
class AsyncGuildTask class AsyncGuildTask
{ {
public: public:
int socket_handle = 0;
long long watch_guild_id = 0; long long watch_guild_id = 0;
time_t time = 0; time_t time = 0;
ss::SS_IM_ForwardGuildCMMsg forward_msg; ss::SS_IM_ForwardGuildCMMsg forward_msg;
@ -94,7 +95,7 @@ void GuildMgr::_SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_Forward
ss::SS_CommonError respmsg; ss::SS_CommonError respmsg;
respmsg.set_errcode(SERVER_INTERNAL_ERROR); respmsg.set_errcode(SERVER_INTERNAL_ERROR);
respmsg.set_errmsg("服务器内部错误"); respmsg.set_errmsg("服务器内部错误");
ForwardGuildSMMsg(msg.context(), msg.msgid(), respmsg); ForwardGuildSMMsg(hdr.socket_handle, msg.context(), msg.msgid(), respmsg);
return; return;
} }
switch (msg.msgid()) { switch (msg.msgid()) {
@ -110,7 +111,7 @@ void GuildMgr::_SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_Forward
{ {
cs::CMGuildCreate cmmsg; cs::CMGuildCreate cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMGuildCreate(msg.context(), cmmsg); _CMGuildCreate(hdr.socket_handle, msg.context(), cmmsg);
} }
break; break;
case cs::CMMessageId_e::_CMGuildJoin: case cs::CMMessageId_e::_CMGuildJoin:
@ -155,14 +156,14 @@ void GuildMgr::_SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_Forward
{ {
cs::CMGuildSearch cmmsg; cs::CMGuildSearch cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMGuildSearch(msg.context(), cmmsg); _CMGuildSearch(hdr.socket_handle, msg.context(), cmmsg);
} }
break; break;
case cs::CMMessageId_e::_CMGuildRank: case cs::CMMessageId_e::_CMGuildRank:
{ {
cs::CMGuildRank cmmsg; cs::CMGuildRank cmmsg;
cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size()); cmmsg.ParseFromArray(msg.payload().data(), msg.payload().size());
_CMGuildRank(msg.context(), cmmsg); _CMGuildRank(hdr.socket_handle, msg.context(), cmmsg);
} }
break; break;
case cs::CMMessageId_e::_CMGuildMemberList: case cs::CMMessageId_e::_CMGuildMemberList:
@ -184,25 +185,25 @@ void GuildMgr::_SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_Forward
} }
} }
void GuildMgr::_CMGuildCreate(const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg) void GuildMgr::_CMGuildCreate(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg)
{ {
Guild* guild = GetGuild(context.user_info().base_data().guild_id()); Guild* guild = GetGuild(context.user_info().base_data().guild_id());
if (guild) { if (guild) {
cs::SMGuildCreate respmsg; cs::SMGuildCreate respmsg;
respmsg.set_errcode(1); respmsg.set_errcode(1);
respmsg.set_errmsg("群id已经存在"); respmsg.set_errmsg("群id已经存在");
ForwardGuildSMMsg(context, respmsg); ForwardGuildSMMsg(socket_handle, context, respmsg);
return; return;
} }
AsyncTaskMgr::Instance()->CreateNewGuildTask(context, msg); AsyncTaskMgr::Instance()->CreateNewGuildTask(context, msg);
} }
void GuildMgr::_CMGuildSearch(const ss::MFIMMsgConext& context, const cs::CMGuildSearch& msg) void GuildMgr::_CMGuildSearch(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildSearch& msg)
{ {
} }
void GuildMgr::_CMGuildRank(const ss::MFIMMsgConext& context, const cs::CMGuildRank& msg) void GuildMgr::_CMGuildRank(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildRank& msg)
{ {
} }
@ -246,7 +247,8 @@ Guild* GuildMgr::GetGuild(long long guild_id)
return itr != id_hash_.end() ? itr->second : nullptr; return itr != id_hash_.end() ? itr->second : nullptr;
} }
void GuildMgr::ForwardGuildSMMsg(const ss::MFIMMsgConext& context, void GuildMgr::ForwardGuildSMMsg(int socket_handle,
const ss::MFIMMsgConext& context,
int msgid, int msgid,
const ::google::protobuf::Message& smmsg) const ::google::protobuf::Message& smmsg)
{ {
@ -254,5 +256,5 @@ void GuildMgr::ForwardGuildSMMsg(const ss::MFIMMsgConext& context,
*msg.mutable_context() = context; *msg.mutable_context() = context;
msg.set_msgid(msgid); msg.set_msgid(msgid);
smmsg.SerializeToString(msg.mutable_payload()); smmsg.SerializeToString(msg.mutable_payload());
MSConnMgr::Instance()->SendMsg(msg, 0); IMListener::Instance()->SendMsg(socket_handle, msg);
} }

View File

@ -31,21 +31,22 @@ class GuildMgr : public a8::Singleton<GuildMgr>
void _SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_ForwardGuildCMMsg& msg); void _SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_ForwardGuildCMMsg& msg);
private: private:
void _CMGuildCreate(const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg); void _CMGuildCreate(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg);
void _CMGuildSearch(const ss::MFIMMsgConext& context, const cs::CMGuildSearch& msg); void _CMGuildSearch(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildSearch& msg);
void _CMGuildRank(const ss::MFIMMsgConext& context, const cs::CMGuildRank& msg); void _CMGuildRank(int socket_handle, const ss::MFIMMsgConext& context, const cs::CMGuildRank& msg);
void AddAsyncTask(long long guild_id, AsyncGuildTask* task); void AddAsyncTask(long long guild_id, AsyncGuildTask* task);
void LoadGuild(long long guild_id); void LoadGuild(long long guild_id);
bool IsValidGuildId(long long guild_id); bool IsValidGuildId(long long guild_id);
Guild* GetGuild(long long group_id); Guild* GetGuild(long long group_id);
template <typename T> template <typename T>
void ForwardGuildSMMsg(const ss::MFIMMsgConext& context, T& smmsg) void ForwardGuildSMMsg(int socket_handle, const ss::MFIMMsgConext& context, T& smmsg)
{ {
static int msgid = f8::Net_GetMessageId(smmsg); static int msgid = f8::Net_GetMessageId(smmsg);
ForwardGuildSMMsg(context, msgid, smmsg); ForwardGuildSMMsg(socket_handle, context, msgid, smmsg);
} }
void ForwardGuildSMMsg(const ss::MFIMMsgConext& context, void ForwardGuildSMMsg(int socket_handle,
const ss::MFIMMsgConext& context,
int msgid, int msgid,
const ::google::protobuf::Message& smmsg); const ::google::protobuf::Message& smmsg);

View File

@ -177,10 +177,7 @@ void SyncHelper::SS_IM_FriendDeleteRequest_TimeOut(ss::SS_IM_FriendDeleteRequest
void SyncHelper::SendIMConnMsg(int instance_id, int msgid, ::google::protobuf::Message& msg) void SyncHelper::SendIMConnMsg(int instance_id, int msgid, ::google::protobuf::Message& msg)
{ {
IMConn* conn = IMConnMgr::Instance()->GetConnByInstanceId(instance_id); if (instance_id == App::Instance()->instance_id) {
if (conn) {
conn->SendMsg(msgid, msg);
} else {
int packlen = msg.ByteSize(); int packlen = msg.ByteSize();
char* buff = nullptr; char* buff = nullptr;
if (packlen > 0) { if (packlen > 0) {
@ -200,5 +197,10 @@ void SyncHelper::SendIMConnMsg(int instance_id, int msgid, ::google::protobuf::M
if (buff) { if (buff) {
free(buff); free(buff);
} }
} else {
IMConn* conn = IMConnMgr::Instance()->GetConnByInstanceId(instance_id);
if (conn) {
conn->SendMsg(msgid, msg);
}
} }
} }