From 1bcc82aef3a375976f3c2435236dac8d045a3cee Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 29 Sep 2020 20:08:02 +0800 Subject: [PATCH] 1 --- server/imserver/guildmgr.cc | 10 ++++++++++ server/imserver/guildmgr.h | 4 ++++ server/imserver/handlermgr.cc | 3 +++ server/imserver/player.cc | 18 ++++++++++++++++++ server/imserver/player.h | 9 +++++++++ server/imserver/playermgr.cc | 6 ++++++ server/imserver/playermgr.h | 3 +++ server/tools/protobuild/ss_msgid.proto | 3 +++ server/tools/protobuild/ss_proto.proto | 2 +- 9 files changed, 57 insertions(+), 1 deletion(-) diff --git a/server/imserver/guildmgr.cc b/server/imserver/guildmgr.cc index a41bf77..fbff01b 100644 --- a/server/imserver/guildmgr.cc +++ b/server/imserver/guildmgr.cc @@ -103,6 +103,16 @@ void GuildMgr::_SS_IM_ForwardGuildSMMsg(f8::MsgHdr& hdr, const ss::SS_IM_Forward } } +void GuildMgr::_SS_IM_RefeshGuildMemberInfo(f8::MsgHdr& hdr, const ss::SS_IM_RefeshGuildMemberInfo& msg) +{ + +} + +void GuildMgr::_SS_IM_PushGuildUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushGuildUserOnlineState& msg) +{ + +} + void GuildMgr::CreateAsyncTask(int socket_handle, long long guild_id, AsyncGuildTask* task) { Guild* guild = GetGuild(guild_id); diff --git a/server/imserver/guildmgr.h b/server/imserver/guildmgr.h index 276ff23..d6a3597 100644 --- a/server/imserver/guildmgr.h +++ b/server/imserver/guildmgr.h @@ -5,6 +5,8 @@ namespace ss class MFIMMsgConext; class SS_IM_ForwardGuildCMMsg; class SS_IM_ForwardGuildSMMsg; + class SS_IM_RefeshGuildMemberInfo; + class SS_IM_PushGuildUserOnlineState; } class Guild; @@ -35,6 +37,8 @@ class GuildMgr : public a8::Singleton const ::google::protobuf::Message& smmsg); void _SS_IM_ForwardGuildCMMsg(f8::MsgHdr& hdr, const ss::SS_IM_ForwardGuildCMMsg& msg); void _SS_IM_ForwardGuildSMMsg(f8::MsgHdr& hdr, const ss::SS_IM_ForwardGuildSMMsg& msg); + void _SS_IM_RefeshGuildMemberInfo(f8::MsgHdr& hdr, const ss::SS_IM_RefeshGuildMemberInfo& msg); + void _SS_IM_PushGuildUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushGuildUserOnlineState& msg); private: void CreateAsyncTask(int socket_handle, long long guild_id, AsyncGuildTask* task); diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index a9ec8c3..4bb3ce6 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -67,8 +67,11 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_RandomUsersRequest); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_GuildMemberQuitRequest); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_GuildMemberUpdateRequest); + RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_GS_QueryGuildUserOnlineState); RegisterNetMsgHandler(&imcmsghandler, &GuildMgr::_SS_IM_ForwardGuildCMMsg); + RegisterNetMsgHandler(&imcmsghandler, &GuildMgr::_SS_IM_RefeshGuildMemberInfo); + RegisterNetMsgHandler(&imcmsghandler, &GuildMgr::_SS_IM_PushGuildUserOnlineState); RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping); diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 979e39f..3d1b435 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -1159,6 +1159,15 @@ void Player::ForwardGuildCMMsg(f8::MsgHdr& hdr, long long guild_id) msg); } +void Player::SendGSMsg(int msgid, ::google::protobuf::Message& msg) +{ + if (GuildId() != 0) { + SyncHelper::Instance()->SendIMConnMsg(JsonDataMgr::Instance()->GetIMInstanceId(GuildId()), + msgid, + msg); + } +} + void Player::FillMFUserInfo(cs::MFUserInfo* user_info) { TypeConvert::Convert(myself.base_data, *(user_info->mutable_base_data())); @@ -1322,6 +1331,7 @@ void Player::NotifyOnline() } SendSSMsg(myself, msg); } + SyncGuildMemberInfo(); } void Player::NotifyOffline() @@ -1329,6 +1339,7 @@ void Player::NotifyOffline() ss::SS_IM_OnUserOffline msg; msg.add_account_ids(AccountId()); SendSSMsg(myself, msg); + SyncGuildMemberInfo(); } void Player::OnDataVersion1Change() @@ -1966,3 +1977,10 @@ void Player::InternalRemoveFriend(const std::string& account_id, bool need_sync, MarkDirty(); } } + +void Player::SyncGuildMemberInfo() +{ + ss::SS_IM_RefeshGuildMemberInfo msg; + FillIMMsgConext(msg.mutable_context()); + SendGSMsg(msg); +} diff --git a/server/imserver/player.h b/server/imserver/player.h index 3b1f8bf..dc643bd 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -69,6 +69,13 @@ class Player } } + template + void SendGSMsg(T& msg) + { + static int msgid = f8::Net_GetMessageId(msg); + SendGSMsg(msgid, msg); + } + void _CMPing(f8::MsgHdr& hdr, const cs::CMPing& msg); void _CMUpdateUserInfo(f8::MsgHdr& hdr, const cs::CMUpdateUserInfo& msg); void _CMUpdateTempCustomData(f8::MsgHdr& hdr, const cs::CMUpdateTempCustomData& msg); @@ -142,6 +149,7 @@ private: void FillBlackList(::google::protobuf::RepeatedPtrField< ::cs::MFUserInfo >* black_list); void ForwardGroupCMMsg(f8::MsgHdr& hdr, long long hash_code); void ForwardGuildCMMsg(f8::MsgHdr& hdr, long long guild_id); + void SendGSMsg(int msgid, ::google::protobuf::Message& msg); void FillApplyList(const cs::MFPaging& paging, cs::SMFriendApplyList& respmsg); void MarkDirty(); void OnDataVersion1Change(); @@ -174,6 +182,7 @@ private: void QueryUserFromDB(); void ShowErrorMsg(const std::string& msg); void InternalRemoveFriend(const std::string& account_id, bool need_sync, bool auto_delete); + void SyncGuildMemberInfo(); private: bool dirty_ = false; diff --git a/server/imserver/playermgr.cc b/server/imserver/playermgr.cc index 1d9ecae..63ae567 100644 --- a/server/imserver/playermgr.cc +++ b/server/imserver/playermgr.cc @@ -247,6 +247,11 @@ void PlayerMgr::_SS_IM_UpdateUserInfo(f8::MsgHdr& hdr, const ss::SS_IM_UpdateUse } } +void PlayerMgr::_SS_GS_QueryGuildUserOnlineState(f8::MsgHdr& hdr, const ss::SS_GS_QueryGuildUserOnlineState& msg) +{ + +} + void PlayerMgr::_CMLoginOld(f8::MsgHdr& hdr, const cs::CMLoginOld& msg) { cs::CMLogin new_msg; @@ -625,6 +630,7 @@ void PlayerMgr::OnClientSocketDisconnect(int socket_handle) Player* hum = GetPlayerBySocket(socket_handle); if (hum) { GameLog::Instance()->Logout(hum); + hum->myself.base_data.online = false; hum->NotifyOffline(); hum->UnInit(); socket_hash_.erase(socket_handle); diff --git a/server/imserver/playermgr.h b/server/imserver/playermgr.h index 6531d6a..d49dce3 100644 --- a/server/imserver/playermgr.h +++ b/server/imserver/playermgr.h @@ -26,6 +26,7 @@ namespace ss class SS_IM_GuildMemberQuitResponse; class SS_IM_GuildMemberUpdateRequest; class SS_IM_GuildMemberUpdateResponse; + class SS_GS_QueryGuildUserOnlineState; } class Player; @@ -60,6 +61,8 @@ class PlayerMgr : public a8::Singleton void _SS_IM_UpdateUserInfo(f8::MsgHdr& hdr, const ss::SS_IM_UpdateUserInfo& msg); + void _SS_GS_QueryGuildUserOnlineState(f8::MsgHdr& hdr, const ss::SS_GS_QueryGuildUserOnlineState& msg); + void _CMLoginOld(f8::MsgHdr& hdr, const cs::CMLoginOld& msg); void _CMLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg); diff --git a/server/tools/protobuild/ss_msgid.proto b/server/tools/protobuild/ss_msgid.proto index ace578d..3d2d87f 100644 --- a/server/tools/protobuild/ss_msgid.proto +++ b/server/tools/protobuild/ss_msgid.proto @@ -47,4 +47,7 @@ enum SSMessageId_e _SS_IM_GuildMemberQuitResponse = 1032; _SS_IM_GuildMemberUpdateRequest = 1033; _SS_IM_GuildMemberUpdateResponse = 1034; + _SS_IM_RefeshGuildMemberInfo = 1035; + _SS_GS_QueryGuildUserOnlineState = 1036; + _SS_IM_PushGuildUserOnlineState = 1037; } diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index 54f6292..8bb1d1e 100755 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -368,5 +368,5 @@ message SS_GS_QueryGuildUserOnlineState message SS_IM_PushGuildUserOnlineState { optional MFIMMsgConext context = 1; - repeated cs.MFUserInfo user_infos = 2; + repeated string online_users = 2; }