From f9b0747b38b013c02d53ae20ad98b5c73495f1d3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 15 Jun 2020 17:25:58 +0800 Subject: [PATCH] 1 --- server/imserver/IMConn.h | 2 +- server/imserver/IMConnMgr.cc | 9 +++++++++ server/imserver/IMConnMgr.h | 1 + server/imserver/MSConnMgr.cc | 9 +++++++++ server/imserver/MSConnMgr.h | 1 + server/imserver/handlermgr.cc | 1 + server/imserver/player.cc | 35 ++++++++++++++++++++++++++++++----- server/imserver/player.h | 1 + server/imserver/playermgr.cc | 5 +++++ server/imserver/playermgr.h | 3 +++ 10 files changed, 61 insertions(+), 6 deletions(-) diff --git a/server/imserver/IMConn.h b/server/imserver/IMConn.h index e5334e4..39e2fb1 100644 --- a/server/imserver/IMConn.h +++ b/server/imserver/IMConn.h @@ -30,7 +30,7 @@ class IMConn void SendMsg(T& msg) { static int msgid = f8::Net_GetMessageId(msg); - SendMsg(tcp_client_, msgid, msg); + SendMsg(msgid, msg); } void SendMsg(int msgid, ::google::protobuf::Message& msg) { diff --git a/server/imserver/IMConnMgr.cc b/server/imserver/IMConnMgr.cc index 58fefd4..b29f2cc 100644 --- a/server/imserver/IMConnMgr.cc +++ b/server/imserver/IMConnMgr.cc @@ -51,3 +51,12 @@ void IMConnMgr::_SS_MS_IMServerList(f8::MsgHdr& hdr, const ss::SS_MS_IMServerLis { } + +void IMConnMgr::TraverseIMConn(std::function func) +{ + for (auto& pair : key_hash_) { + if (!func(pair.second)) { + return; + } + } +} diff --git a/server/imserver/IMConnMgr.h b/server/imserver/IMConnMgr.h index db8256b..03d7113 100644 --- a/server/imserver/IMConnMgr.h +++ b/server/imserver/IMConnMgr.h @@ -25,6 +25,7 @@ class IMConnMgr : public a8::Singleton IMConn* GetConnByKey(const std::string& key); IMConn* RecreateIMConn(const std::string& host, int port); void _SS_MS_IMServerList(f8::MsgHdr& hdr, const ss::SS_MS_IMServerList& msg); + void TraverseIMConn(std::function func); private: std::map key_hash_; diff --git a/server/imserver/MSConnMgr.cc b/server/imserver/MSConnMgr.cc index 53ec40d..8211305 100644 --- a/server/imserver/MSConnMgr.cc +++ b/server/imserver/MSConnMgr.cc @@ -35,3 +35,12 @@ MSConn* MSConnMgr::GetConnById(int instance_id) auto itr = id_hash_.find(instance_id); return itr != id_hash_.end() ? itr->second : nullptr; } + +void MSConnMgr::TraverseMSConn(std::function func) +{ + for (auto& pair : id_hash_) { + if (!func(pair.second)) { + return; + } + } +} diff --git a/server/imserver/MSConnMgr.h b/server/imserver/MSConnMgr.h index c95ac78..8f7b9d4 100644 --- a/server/imserver/MSConnMgr.h +++ b/server/imserver/MSConnMgr.h @@ -23,6 +23,7 @@ class MSConnMgr : public a8::Singleton } conn->SendMsg(msg); } + void TraverseMSConn(std::function func); private: MSConn* GetConnById(int instance_id); diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index 1a8898f..3be004f 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -45,6 +45,7 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_SendChatMsg); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_SendCustomMsg); + RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_UpdateUserInfo); RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping); diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 3e4e02e..b6b9e58 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -15,13 +15,16 @@ #include "IMConn.h" #include "IMConnMgr.h" +#include "MSConn.h" +#include "MSConnMgr.h" void Player::Init() { - crc32_code = a8::openssl::Crc32( - (unsigned char*)data.base_data.account_id.data(), - data.base_data.account_id.size() - ); + crc32_code = a8::openssl::Crc32 + ( + (unsigned char*)data.base_data.account_id.data(), + data.base_data.account_id.size() + ); SyncLocToMasterServer(); NotifyOnline(); } @@ -415,6 +418,11 @@ void Player::ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code) MSConnMgr::Instance()->SendMsg(msg, hash_code); } +void Player::FillMFUserInfo(cs::MFUserInfo* user_info) +{ + +} + void Player::MarkDirty() { if (!dirty_) { @@ -581,5 +589,22 @@ const std::string Player::AccountId() void Player::InternalUpdateUserInfo() { - + ss::SS_IM_UpdateUserInfo ss_msg; + FillMFUserInfo(ss_msg.mutable_user_info()); + MSConnMgr::Instance()->TraverseMSConn + ( + [&ss_msg] (MSConn* conn) + { + conn->SendMsg(ss_msg); + return true; + } + ); + IMConnMgr::Instance()->TraverseIMConn + ( + [&ss_msg] (IMConn* conn) + { + conn->SendMsg(ss_msg); + return true; + } + ); } diff --git a/server/imserver/player.h b/server/imserver/player.h index 5f203a3..8adc5fa 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -98,6 +98,7 @@ class Player private: void FillFriendList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* friend_list); void FillIMMsgConext(f8::MsgHdr& hdr, ss::MFIMMsgConext* conext); + void FillMFUserInfo(cs::MFUserInfo* user_info); void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code); void SaveToDB(); Friend* GetFriendById(const std::string& friend_id); diff --git a/server/imserver/playermgr.cc b/server/imserver/playermgr.cc index 4586750..0744262 100644 --- a/server/imserver/playermgr.cc +++ b/server/imserver/playermgr.cc @@ -40,6 +40,11 @@ void PlayerMgr::_SS_IM_SendCustomMsg(f8::MsgHdr& hdr, const ss::SS_IM_SendCustom } +void PlayerMgr::_SS_IM_UpdateUserInfo(f8::MsgHdr& hdr, const ss::SS_IM_UpdateUserInfo& msg) +{ + +} + void PlayerMgr::_CMLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg) { Player* hum = GetPlayerByAccountId(msg.account_id()); diff --git a/server/imserver/playermgr.h b/server/imserver/playermgr.h index f5778f7..62a860c 100644 --- a/server/imserver/playermgr.h +++ b/server/imserver/playermgr.h @@ -11,6 +11,7 @@ namespace ss class SS_MS_PushUserList; class SS_IM_SendChatMsg; class SS_IM_SendCustomMsg; + class SS_IM_UpdateUserInfo; } class Player; @@ -32,6 +33,8 @@ class PlayerMgr : public a8::Singleton void _SS_IM_SendChatMsg(f8::MsgHdr& hdr, const ss::SS_IM_SendChatMsg& msg); void _SS_IM_SendCustomMsg(f8::MsgHdr& hdr, const ss::SS_IM_SendCustomMsg& msg); + void _SS_IM_UpdateUserInfo(f8::MsgHdr& hdr, const ss::SS_IM_UpdateUserInfo& msg); + void _CMLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg); Player* GetPlayerBySocket(int socket);