From b665f4aafa3e247fbf87383e3622870fe9738dde Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 15 Sep 2020 11:25:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B7=A5=E4=BC=9A=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/imserver/CMakeLists.txt | 5 +++++ server/imserver/IMConnMgr.cc | 6 ++++++ server/imserver/IMConnMgr.h | 1 + server/imserver/guildmgr.cc | 4 ++-- server/imserver/guildmgr.h | 4 ++-- server/imserver/handlermgr.cc | 2 ++ server/imserver/synchelper.cc | 28 ++++++++++++++++++++++++++ server/imserver/synchelper.h | 9 +++++++++ server/tools/protobuild/ss_msgid.proto | 2 ++ server/tools/protobuild/ss_proto.proto | 4 ++-- 10 files changed, 59 insertions(+), 6 deletions(-) diff --git a/server/imserver/CMakeLists.txt b/server/imserver/CMakeLists.txt index 35e543a..9251b73 100644 --- a/server/imserver/CMakeLists.txt +++ b/server/imserver/CMakeLists.txt @@ -23,6 +23,7 @@ include_directories( /usr/include/glm ../../third_party ../../third_party/behaviac/inc + ../../third_party/recastnavigation/Recast/Include ../../third_party/recastnavigation/Detour/Include ../../third_party/recastnavigation/DetourTileCache/Include . @@ -46,6 +47,10 @@ aux_source_directory(../../third_party/recastnavigation/Detour/Source SRC_LIST ) +aux_source_directory(../../third_party/recastnavigation/Recast/Source + SRC_LIST +) + aux_source_directory(../../third_party/recastnavigation/DetourTileCache/Source SRC_LIST ) diff --git a/server/imserver/IMConnMgr.cc b/server/imserver/IMConnMgr.cc index c12ec36..4c1a508 100644 --- a/server/imserver/IMConnMgr.cc +++ b/server/imserver/IMConnMgr.cc @@ -25,6 +25,12 @@ IMConn* IMConnMgr::GetConnByKey(const std::string& key) return itr != key_hash_.end() ? itr->second : nullptr; } +IMConn* IMConnMgr::GetConnByInstanceId(long long instance_id) +{ + auto itr = id_hash_.find(instance_id); + return itr != id_hash_.end() ? itr->second : nullptr; +} + IMConn* IMConnMgr::RecreateIMConn(const std::string& host, int port) { std::string key = host + ":" + a8::XValue(port).GetString(); diff --git a/server/imserver/IMConnMgr.h b/server/imserver/IMConnMgr.h index edec974..afd5229 100644 --- a/server/imserver/IMConnMgr.h +++ b/server/imserver/IMConnMgr.h @@ -27,6 +27,7 @@ class IMConnMgr : public a8::Singleton void _SS_Pong(f8::MsgHdr& hdr, const ss::SS_Pong& msg); IMConn* GetConnByKey(const std::string& key); + IMConn* GetConnByInstanceId(long long instance_id); IMConn* RecreateIMConn(const std::string& host, int port); void TraverseIMConn(std::function func); diff --git a/server/imserver/guildmgr.cc b/server/imserver/guildmgr.cc index d452ec1..bdc12de 100644 --- a/server/imserver/guildmgr.cc +++ b/server/imserver/guildmgr.cc @@ -22,7 +22,7 @@ void GuildMgr::_SS_MS_LoadGuild(f8::MsgHdr& hdr, const ss::SS_MS_LoadGuild& msg) } -void GuildMgr::_SS_MS_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGuildCMMsg& msg) +void GuildMgr::_SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_ForwardGuildCMMsg& msg) { switch (hdr.msgid) { case cs::CMMessageId_e::_CMGuildCreate: @@ -230,7 +230,7 @@ Guild* GuildMgr::GetGuild(long long guild_id) void GuildMgr::ForwardGuildSMMsg(const ss::MFIMMsgConext& context, const ::google::protobuf::Message& smmsg) { - ss::SS_MS_ForwardGuildSMMsg msg; + ss::SS_IM_ForwardGuildSMMsg msg; *msg.mutable_context() = context; smmsg.SerializeToString(msg.mutable_payload()); MSConnMgr::Instance()->SendMsg(msg, 0); diff --git a/server/imserver/guildmgr.h b/server/imserver/guildmgr.h index 5c2a645..8d7158c 100644 --- a/server/imserver/guildmgr.h +++ b/server/imserver/guildmgr.h @@ -15,7 +15,7 @@ namespace ss { class MFIMMsgConext; class SS_MS_LoadGuild; - class SS_MS_ForwardGuildCMMsg; + class SS_IM_ForwardGuildCMMsg; } namespace google @@ -41,7 +41,7 @@ class GuildMgr : public a8::Singleton void UnInit(); void _SS_MS_LoadGuild(f8::MsgHdr& hdr, const ss::SS_MS_LoadGuild& msg); - void _SS_MS_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_MS_ForwardGuildCMMsg& msg); + void _SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_ForwardGuildCMMsg& msg); private: void _CMGuildCreate(const ss::MFIMMsgConext& context, const cs::CMGuildCreate& msg); diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index febea2e..378e068 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -96,6 +96,8 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupDismiss); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupRename); + RegisterNetMsgHandler(&immsghandler, &GuildMgr::_SS_IM_ForwardGuildCMMsg); + RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGuildCreate); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGuildJoin); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGuildAgree); diff --git a/server/imserver/synchelper.cc b/server/imserver/synchelper.cc index 1c8e45b..0bf71a5 100644 --- a/server/imserver/synchelper.cc +++ b/server/imserver/synchelper.cc @@ -174,3 +174,31 @@ void SyncHelper::SS_IM_FriendDeleteRequest_TimeOut(ss::SS_IM_FriendDeleteRequest event_data ); } + +void SyncHelper::SendIMConnMsg(int instance_id, int msgid, ::google::protobuf::Message& msg) +{ + IMConn* conn = IMConnMgr::Instance()->GetConnByInstanceId(instance_id); + if (conn) { + conn->SendMsg(msgid, msg); + } else { + int packlen = msg.ByteSize(); + char* buff = nullptr; + if (packlen > 0) { + buff = (char*)malloc(packlen); + msg.SerializeToArray(buff, packlen); + } + App::Instance()->AddSocketMsg + ( + SF_IMConn, + 0, + 0, + msgid, + 0, + buff, + packlen + ); + if (buff) { + free(buff); + } + } +} diff --git a/server/imserver/synchelper.h b/server/imserver/synchelper.h index bb48566..8c14204 100644 --- a/server/imserver/synchelper.h +++ b/server/imserver/synchelper.h @@ -47,5 +47,14 @@ public: void BroadcastIMConnMsg(int msgid, ::google::protobuf::Message& msg); + template + void SendIMConnMsg(int intance_id, T& msg) + { + static int msgid = f8::Net_GetMessageId(msg); + SendIMConnMsg(msgid, msg); + } + + void SendIMConnMsg(int intance_id, int msgid, ::google::protobuf::Message& msg); + std::map pending_request_hash_; }; diff --git a/server/tools/protobuild/ss_msgid.proto b/server/tools/protobuild/ss_msgid.proto index 081c947..f620470 100644 --- a/server/tools/protobuild/ss_msgid.proto +++ b/server/tools/protobuild/ss_msgid.proto @@ -41,4 +41,6 @@ enum SSMessageId_e _SS_IM_OnUserOffline = 1024; _SS_IM_RandomUsersRequest = 1025; _SS_IM_RandomUsersResponse = 1026; + _SS_IM_ForwardGuildCMMsg = 1027; + _SS_IM_ForwardGuildSMMsg = 1028; } diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index 064b3dd..5f173a9 100755 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -151,13 +151,13 @@ message SS_MS_LoadGroup optional int64 group_id = 1; } -message SS_MS_ForwardGuildCMMsg +message SS_IM_ForwardGuildCMMsg { optional MFIMMsgConext context = 1; optional bytes payload = 2; } -message SS_MS_ForwardGuildSMMsg +message SS_IM_ForwardGuildSMMsg { optional MFIMMsgConext context = 1; optional bytes payload = 2;