diff --git a/server/imserver/asynctaskmgr.cc b/server/imserver/asynctaskmgr.cc index 62ff8fb..5fbfbad 100644 --- a/server/imserver/asynctaskmgr.cc +++ b/server/imserver/asynctaskmgr.cc @@ -108,24 +108,18 @@ void AsyncTaskMgr::CreateRecommandFriendTask(Player* hum) { RecommandFriendTask* task = new RecommandFriendTask(); { - #if 0 - ss::SS_IM_QueryUserOnlineState msg; + ss::SS_IM_RandomUsersRequest msg; hum->FillIMMsgConext(msg.mutable_context()); - for (auto& account_id : account_ids) { - msg.add_account_ids(account_id); + for (auto& account_id : hum->exclude_account_ids) { + msg.add_exclude_account_ids(account_id); } hum->SendSSMsg(hum->myself, msg); - - for (auto& account_id : account_ids) { - task->users[account_id] = false; - } FillAsyncTaskContext(hum, &task->context, msg.context().seqid()); - #endif recommand_friend_tasks_[task->context.seqid] = task; } a8::Timer::Instance()->AddDeadLineTimer ( - 200, + 500, a8::XParams() .SetSender(task), [] (const a8::XParams& param) @@ -154,6 +148,11 @@ void AsyncTaskMgr::_SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_P } } +void AsyncTaskMgr::_SS_IM_RandomUsersResponse(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersResponse& msg) +{ + +} + QueryUserStatusTask* AsyncTaskMgr::GetQueryUserStatusTask(long long seqid) { auto itr = query_user_status_tasks_.find(seqid); diff --git a/server/imserver/asynctaskmgr.h b/server/imserver/asynctaskmgr.h index 78b6053..96306f1 100644 --- a/server/imserver/asynctaskmgr.h +++ b/server/imserver/asynctaskmgr.h @@ -3,6 +3,7 @@ namespace ss { class SS_IM_PushUserOnlineState; + class SS_IM_RandomUsersResponse; } struct QueryUserStatusTask; @@ -23,6 +24,7 @@ public: void CreateRecommandFriendTask(Player* hum); void _SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushUserOnlineState& msg); + void _SS_IM_RandomUsersResponse(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersResponse& msg); private: QueryUserStatusTask* GetQueryUserStatusTask(long long seqid); diff --git a/server/imserver/handlermgr.cc b/server/imserver/handlermgr.cc index 49891b5..b6eb60f 100644 --- a/server/imserver/handlermgr.cc +++ b/server/imserver/handlermgr.cc @@ -41,6 +41,7 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendAgreeResponse); RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendDeleteResponse); RegisterNetMsgHandler(&immsghandler, &PlayerMgr::_SS_IM_PushUserOnlineState); + RegisterNetMsgHandler(&immsghandler, &PlayerMgr::_SS_IM_RandomUsersResponse); RegisterNetMsgHandler(&mscmsghandler, &PlayerMgr::_SS_MS_PushUserList); RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_LoadGroup); @@ -58,7 +59,7 @@ void HandlerMgr::RegisterNetMsgHandlers() RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOnline); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOffline); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_QueryUserOnlineState); - + RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_RandomUsersRequest); RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping); diff --git a/server/imserver/player.h b/server/imserver/player.h index 53f7da4..622dfb9 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -20,6 +20,7 @@ class Player RoleData role_data; long ip_saddr = 0; int account_registertime = 0; + std::set exclude_account_ids; public: void Init(); diff --git a/server/imserver/playermgr.cc b/server/imserver/playermgr.cc index 526f6f6..e8c7de2 100644 --- a/server/imserver/playermgr.cc +++ b/server/imserver/playermgr.cc @@ -141,6 +141,16 @@ void PlayerMgr::_SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_Push } } +void PlayerMgr::_SS_IM_RandomUsersRequest(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersRequest& msg) +{ + +} + +void PlayerMgr::_SS_IM_RandomUsersResponse(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersResponse& msg) +{ + AsyncTaskMgr::Instance()->_SS_IM_RandomUsersResponse(hdr, 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()); diff --git a/server/imserver/playermgr.h b/server/imserver/playermgr.h index 762fa0c..cb258fd 100644 --- a/server/imserver/playermgr.h +++ b/server/imserver/playermgr.h @@ -19,6 +19,8 @@ namespace ss class SS_IM_OnUserOffline; class SS_IM_QueryUserOnlineState; class SS_IM_PushUserOnlineState; + class SS_IM_RandomUsersRequest; + class SS_IM_RandomUsersResponse; } class Player; @@ -46,6 +48,8 @@ class PlayerMgr : public a8::Singleton 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_RandomUsersRequest(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersRequest& msg); + void _SS_IM_RandomUsersResponse(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersResponse& 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 8a224bd..081c947 100644 --- a/server/tools/protobuild/ss_msgid.proto +++ b/server/tools/protobuild/ss_msgid.proto @@ -39,4 +39,6 @@ enum SSMessageId_e _SS_IM_PushUserOnlineState = 1022; _SS_IM_OnUserOnline = 1023; _SS_IM_OnUserOffline = 1024; + _SS_IM_RandomUsersRequest = 1025; + _SS_IM_RandomUsersResponse = 1026; } diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index ad554e0..8b99bb6 100755 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -261,10 +261,12 @@ message SS_IM_OnUserOffline message SS_IM_RandomUsersRequest { + optional MFIMMsgConext context = 1; repeated string exclude_account_ids = 3; } message SS_IM_RandomUsersResponse { - repeated string exclude_account_ids = 3; + optional MFIMMsgConext context = 1; + repeated cs.MFUserInfo user_infos = 2; }