This commit is contained in:
aozhiwei 2020-09-30 11:13:02 +08:00
parent 1bcc82aef3
commit 7de769b4b6
7 changed files with 81 additions and 6 deletions

View File

@ -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<std::string>* 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<std::string>* members = GetJobMembers(job);

View File

@ -33,6 +33,9 @@ public:
int GetMemberJob(const std::string& account_id);
std::set<std::string>* 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();

View File

@ -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)

View File

@ -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()

View File

@ -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);
}

View File

@ -100,4 +100,6 @@ struct GuildMember
int data_version1 = 0;
int online = 0;
int last_update_time = 0;
UserTempCustomData temp_custom_data;
};

View File

@ -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;
}