From c7281f28a851b142eb642234ae5bdf6f8cd46cb5 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 23 Jun 2020 19:45:56 +0800 Subject: [PATCH] 1 --- server/imserver/handlermgr.cc | 4 ++++ server/imserver/player.cc | 17 +++++++++++++++-- server/imserver/playermgr.cc | 22 +++++++++++++++++++++- server/imserver/playermgr.h | 8 ++++++++ server/tools/protobuild/ss_msgid.proto | 4 ++++ server/tools/protobuild/ss_proto.proto | 20 ++++++++++++++++++++ 6 files changed, 72 insertions(+), 3 deletions(-) diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index 1c8b4a0..3842225 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -54,6 +54,10 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_FriendAgreeRequest); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_FriendDeleteRequest); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_FriendApply); + RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOnline); + RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOffline); + RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_QueryUserOnlineState); + RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_PushUserOnlineState); RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping); diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 43ae9bd..8efa3b3 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -687,12 +687,25 @@ void Player::FillApplyList(const cs::MFPaging& paging, cs::SMFriendApplyList& re void Player::NotifyOnline() { - + { + ss::SS_IM_OnUserOnline msg; + msg.add_account_ids(AccountId()); + SendSSMsg(myself, msg); + } + { + ss::SS_IM_QueryUserOnlineState msg; + for (auto& pair : friend_hash_) { + msg.add_account_ids(pair.second->base_data.account_id); + } + SendSSMsg(myself, msg); + } } void Player::NotifyOffline() { - + ss::SS_IM_OnUserOffline msg; + msg.add_account_ids(AccountId()); + SendSSMsg(myself, msg); } void Player::OnDataVersion1Change() diff --git a/server/imserver/playermgr.cc b/server/imserver/playermgr.cc index e32660e..31a4506 100644 --- a/server/imserver/playermgr.cc +++ b/server/imserver/playermgr.cc @@ -81,6 +81,26 @@ void PlayerMgr::_SS_IM_FriendApply(f8::MsgHdr& hdr, const ss::SS_IM_FriendApply& } } +void PlayerMgr::_SS_IM_OnUserOnline(f8::MsgHdr& hdr, const ss::SS_IM_OnUserOnline& msg) +{ + +} + +void PlayerMgr::_SS_IM_OnUserOffline(f8::MsgHdr& hdr, const ss::SS_IM_OnUserOffline& msg) +{ + +} + +void PlayerMgr::_SS_IM_QueryUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_QueryUserOnlineState& msg) +{ + +} + +void PlayerMgr::_SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushUserOnlineState& msg) +{ + +} + void PlayerMgr::_SS_IM_UpdateUserInfo(f8::MsgHdr& hdr, const ss::SS_IM_UpdateUserInfo& msg) { auto itr = watch_players_.find(msg.user_info().base_data().account_id()); @@ -390,12 +410,12 @@ void PlayerMgr::AsyncLoginOnOk(const std::string& account_id, hum->myself.base_data.online = true; hum->myself.base_data.last_login_time = App::Instance()->nowtime; hum->role_data.session_id = session_id; - hum->Init(); { ss::MFUserDB user_db; user_db.ParseFromString(friend_data); hum->Deserialize(user_db); } + hum->Init(); socket_hash_[hdr->socket_handle] = hum; accountid_hash_[account_id] = hum; GameLog::Instance()->Login(hum); diff --git a/server/imserver/playermgr.h b/server/imserver/playermgr.h index e74285c..762fa0c 100644 --- a/server/imserver/playermgr.h +++ b/server/imserver/playermgr.h @@ -15,6 +15,10 @@ namespace ss class SS_IM_FriendAgreeRequest; class SS_IM_FriendDeleteRequest; class SS_IM_FriendApply; + class SS_IM_OnUserOnline; + class SS_IM_OnUserOffline; + class SS_IM_QueryUserOnlineState; + class SS_IM_PushUserOnlineState; } class Player; @@ -38,6 +42,10 @@ class PlayerMgr : public a8::Singleton void _SS_IM_FriendAgreeRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendAgreeRequest& msg); void _SS_IM_FriendDeleteRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendDeleteRequest& msg); void _SS_IM_FriendApply(f8::MsgHdr& hdr, const ss::SS_IM_FriendApply& msg); + void _SS_IM_OnUserOnline(f8::MsgHdr& hdr, const ss::SS_IM_OnUserOnline& msg); + void _SS_IM_OnUserOffline(f8::MsgHdr& hdr, const ss::SS_IM_OnUserOffline& msg); + void _SS_IM_QueryUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_QueryUserOnlineState& msg); + void _SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushUserOnlineState& msg); void _SS_IM_UpdateUserInfo(f8::MsgHdr& hdr, const ss::SS_IM_UpdateUserInfo& msg); diff --git a/server/tools/protobuild/ss_msgid.proto b/server/tools/protobuild/ss_msgid.proto index 4548eba..8a224bd 100644 --- a/server/tools/protobuild/ss_msgid.proto +++ b/server/tools/protobuild/ss_msgid.proto @@ -35,4 +35,8 @@ enum SSMessageId_e _SS_IM_FriendDeleteRequest = 1018; _SS_IM_FriendDeleteResponse = 1019; _SS_IM_FriendApply = 1020; + _SS_IM_QueryUserOnlineState = 1021; + _SS_IM_PushUserOnlineState = 1022; + _SS_IM_OnUserOnline = 1023; + _SS_IM_OnUserOffline = 1024; } diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index d0d7563..a06923d 100755 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -234,3 +234,23 @@ message SS_IM_FriendApply optional MFIMMsgConext context = 1; optional string target_id = 3; } + +message SS_IM_QueryUserOnlineState +{ + repeated string account_ids = 3; +} + +message SS_IM_PushUserOnlineState +{ + repeated string online_account_ids = 3; +} + +message SS_IM_OnUserOnline +{ + repeated string account_ids = 3; +} + +message SS_IM_OnUserOffline +{ + repeated string account_ids = 3; +}