From 7de769b4b65b257c9026d771588cf9f7fa268f66 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 30 Sep 2020 11:13:02 +0800 Subject: [PATCH] 1 --- server/imserver/guild.cc | 41 ++++++++++++++++++++++++++ server/imserver/guild.h | 3 ++ server/imserver/guildmgr.cc | 16 ++++++++-- server/imserver/player.cc | 16 +++++++++- server/imserver/typeconvert.cc | 1 + server/imserver/types.h | 2 ++ server/tools/protobuild/ss_proto.proto | 8 +++-- 7 files changed, 81 insertions(+), 6 deletions(-) diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index d4906f4..f0b7e63 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -453,6 +453,11 @@ void Guild::_CMGuildMemberList(f8::MsgHdr& hdr, const cs::CMGuildMemberList& msg GetMemberJob(member->account_id), *member, *(p->mutable_base_data())); + TypeConvert::Convert(member->temp_custom_data, *p->mutable_temp_custom_data()); + if (member->account_id == forward_msg->context().user_info().base_data().account_id()) { + member->online = 1; + member->last_update_time = App::Instance()->nowtime; + } } GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle, forward_msg->context(), @@ -728,6 +733,42 @@ std::set* Guild::GetJobMembers(int job) return &job_hash_[job]; } +void Guild::UpdateMemberInfo(const cs::MFUserInfo& user_info) +{ + GuildMember* member = GetMember(user_info.base_data().account_id()); + if (member) { + member->nickname = user_info.base_data().nickname(); + member->avatar_url = user_info.base_data().avatar_url(); + member->sex = user_info.base_data().sex(); + member->last_login_time = user_info.base_data().last_login_time(); + member->user_value1 = user_info.base_data().user_value1(); + member->user_value2 = user_info.base_data().user_value2(); + member->user_value3 = user_info.base_data().user_value3(); + member->data_version1 = user_info.base_data().base_data_version(); + member->online = user_info.base_data()._online(); + TypeConvert::Convert(user_info.temp_custom_data(), member->temp_custom_data); + member->last_update_time = App::Instance()->nowtime; + } +} + +void Guild::UpdateMemberOnline(const std::string& account_id) +{ + GuildMember* member = GetMember(account_id); + if (member) { + member->online = 1; + member->last_update_time = App::Instance()->nowtime; + } +} + +void Guild::UpdateMemberOffline(const std::string& account_id) +{ + GuildMember* member = GetMember(account_id); + if (member) { + member->online = 0; + member->last_update_time = App::Instance()->nowtime; + } +} + int Guild::GetJobMemberNum(int job) { std::set* members = GetJobMembers(job); diff --git a/server/imserver/guild.h b/server/imserver/guild.h index 02c33c1..25f4bd8 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -33,6 +33,9 @@ public: int GetMemberJob(const std::string& account_id); std::set* GetJobMembers(int job); int GetJobMemberNum(int job); + void UpdateMemberInfo(const cs::MFUserInfo& user_info); + void UpdateMemberOnline(const std::string& account_id); + void UpdateMemberOffline(const std::string& account_id); private: bool IsFull(); diff --git a/server/imserver/guildmgr.cc b/server/imserver/guildmgr.cc index fbff01b..cc860de 100644 --- a/server/imserver/guildmgr.cc +++ b/server/imserver/guildmgr.cc @@ -105,12 +105,24 @@ 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) { - + Guild* guild = GetGuild(msg.context().user_info().base_data().guild_id()); + if (guild) { + guild->UpdateMemberInfo(msg.context().user_info()); + } else { + if (msg.context().user_info().base_data().guild_id() != 0) { + LoadGuild(msg.context().user_info().base_data().guild_id()); + } + } } void GuildMgr::_SS_IM_PushGuildUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushGuildUserOnlineState& msg) { - + Guild* guild = GetGuild(msg.guild_id()); + if (guild) { + for (auto& account_id : msg.online_users()) { + guild->UpdateMemberOnline(account_id); + } + } } void GuildMgr::CreateAsyncTask(int socket_handle, long long guild_id, AsyncGuildTask* task) diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 3d1b435..779355f 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -60,6 +60,19 @@ void Player::Init() DBHelper::Instance()->ShuaOfflineUsers(this); } #endif + SyncGuildMemberInfo(); + a8::Timer::Instance()->AddRepeatTimerAndAttach + ( + 1000 * 2 + (rand() % 3000), + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + Player* hum = (Player*)param.sender.GetUserData(); + hum->SyncGuildMemberInfo(); + }, + &timer_attacher.timer_list_ + ); } void Player::UnInit() @@ -137,6 +150,7 @@ void Player::_CMUpdateUserInfo(f8::MsgHdr& hdr, const cs::CMUpdateUserInfo& msg) myself.base_data.user_value3 = msg.user_value3(); } OnDataVersion1Change(); + SyncGuildMemberInfo(); } void Player::_CMUpdateTempCustomData(f8::MsgHdr& hdr, const cs::CMUpdateTempCustomData& msg) @@ -151,6 +165,7 @@ void Player::_CMUpdateTempCustomData(f8::MsgHdr& hdr, const cs::CMUpdateTempCust myself.temp_custom_data.value2 = msg.temp_custom_data().value3(); } OnTempCustomDataChange(); + SyncGuildMemberInfo(); } void Player::_CMFriendList(f8::MsgHdr& hdr, const cs::CMFriendList& msg) @@ -1331,7 +1346,6 @@ void Player::NotifyOnline() } SendSSMsg(myself, msg); } - SyncGuildMemberInfo(); } void Player::NotifyOffline() diff --git a/server/imserver/typeconvert.cc b/server/imserver/typeconvert.cc index 6b83e00..5b57f31 100644 --- a/server/imserver/typeconvert.cc +++ b/server/imserver/typeconvert.cc @@ -126,6 +126,7 @@ void TypeConvert::Convert(long long guild_id, int guild_job, base_data_pb.set_user_value1(member.user_value1); base_data_pb.set_user_value2(member.user_value2); base_data_pb.set_user_value3(member.user_value3); + base_data_pb.set__online(member.online); base_data_pb.set_base_data_version(member.data_version1); } diff --git a/server/imserver/types.h b/server/imserver/types.h index 06bd8ff..da24685 100644 --- a/server/imserver/types.h +++ b/server/imserver/types.h @@ -100,4 +100,6 @@ struct GuildMember int data_version1 = 0; int online = 0; + int last_update_time = 0; + UserTempCustomData temp_custom_data; }; diff --git a/server/tools/protobuild/ss_proto.proto b/server/tools/protobuild/ss_proto.proto index 8bb1d1e..d239217 100755 --- a/server/tools/protobuild/ss_proto.proto +++ b/server/tools/protobuild/ss_proto.proto @@ -361,12 +361,14 @@ message SS_IM_RefeshGuildMemberInfo message SS_GS_QueryGuildUserOnlineState { - optional MFIMMsgConext context = 1; + optional int64 seqid = 1; + optional int64 guild_id = 2; repeated string account_ids = 3; } message SS_IM_PushGuildUserOnlineState { - optional MFIMMsgConext context = 1; - repeated string online_users = 2; + optional int64 seqid = 1; + optional int64 guild_id = 2; + repeated string online_users = 3; }