1
This commit is contained in:
parent
a234e85917
commit
af8009344b
@ -62,7 +62,8 @@ enum GuildMemberQuitReason
|
||||
{
|
||||
kGuildKick = 0,
|
||||
kGuildQuit = 1,
|
||||
kGuildDismisss = 2
|
||||
kGuildDismisss = 2,
|
||||
kGuildUpdate = 3,
|
||||
};
|
||||
|
||||
enum GuildMemberUpdateReason
|
||||
@ -71,6 +72,7 @@ enum GuildMemberUpdateReason
|
||||
kGuildUpdateReasonAgree = 1,
|
||||
kGuildUpdateReasonSetJob = 2,
|
||||
kGuildUpdateReasonInherit = 3,
|
||||
kGuildUpdateReasonUpdate = 4,
|
||||
};
|
||||
|
||||
const char* const PROJ_NAME_FMT = "friend_imserver";
|
||||
|
@ -261,7 +261,7 @@ void Guild::_CMGuildJoin(f8::MsgHdr& hdr, const cs::CMGuildJoin& msg)
|
||||
|
||||
GuildMember* member = GetMember(forward_msg->context().user_info().base_data().account_id());
|
||||
if (member) {
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonJoin);
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdateOnlyOnline(this, member, kGuildUpdateReasonJoin);
|
||||
} else {
|
||||
DBHelper::Instance()->AddGuildApply(this, forward_msg->context().user_info());
|
||||
}
|
||||
@ -274,7 +274,7 @@ void Guild::_CMGuildAgree(f8::MsgHdr& hdr, const cs::CMGuildAgree& msg)
|
||||
cs::SMGuildAgree respmsg;
|
||||
GuildMember* member = GetMember(msg.apply().base_data().account_id());
|
||||
if (member) {
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonAgree);
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdateOnlyOnline(this, member, kGuildUpdateReasonAgree);
|
||||
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
||||
forward_msg->context(),
|
||||
respmsg);
|
||||
@ -462,6 +462,14 @@ void Guild::_CMGuildQuit(f8::MsgHdr& hdr, const cs::CMGuildQuit& msg)
|
||||
}
|
||||
}
|
||||
SaveToDB();
|
||||
} else {
|
||||
SyncHelper::Instance()->SyncGuildMemberQuitOnlyOnline
|
||||
(
|
||||
this,
|
||||
forward_msg->context().user_info().base_data().account_id(),
|
||||
forward_msg->context().user_info().base_data().account_id(),
|
||||
kGuildUpdate
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -836,6 +844,7 @@ void Guild::_CMGuildMemberSetJob(f8::MsgHdr& hdr, const cs::CMGuildMemberSetJob&
|
||||
}
|
||||
{
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, sender, kGuildUpdateReasonSetJob);
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonSetJob);
|
||||
}
|
||||
{
|
||||
auto p = respmsg.add_chged_members();
|
||||
@ -963,6 +972,17 @@ void Guild::UpdateMemberInfo(const cs::MFUserInfo& user_info)
|
||||
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;
|
||||
if (GetMemberJob(member->account_id) != user_info.base_data().guild_job()) {
|
||||
SyncHelper::Instance()->SyncGuildMemberUpdateOnlyOnline(this, member, kGuildUpdateReasonUpdate);
|
||||
}
|
||||
} else {
|
||||
SyncHelper::Instance()->SyncGuildMemberQuitOnlyOnline
|
||||
(
|
||||
this,
|
||||
user_info.base_data().account_id(),
|
||||
user_info.base_data().account_id(),
|
||||
kGuildUpdate
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -101,35 +101,14 @@ void SyncHelper::SyncGuildMemberUpdate(Guild* guild,
|
||||
GuildMember* member,
|
||||
int reason)
|
||||
{
|
||||
ss::SS_IM_GuildMemberUpdateRequest* notifymsg = new ss::SS_IM_GuildMemberUpdateRequest;
|
||||
notifymsg->set_seqid(App::Instance()->NewUUID());
|
||||
notifymsg->set_guild_id(guild->GuildId());
|
||||
notifymsg->set_guild_job(guild->GetMemberJob(member->account_id));
|
||||
notifymsg->set_sender_id(member->account_id);
|
||||
notifymsg->set_target_id(member->account_id);
|
||||
notifymsg->set_reason(reason);
|
||||
BroadcastIMConnMsg(*notifymsg);
|
||||
pending_request_hash_[notifymsg->seqid()] =
|
||||
a8::Timer::Instance()->AddDeadLineTimer
|
||||
(
|
||||
1000 * 10,
|
||||
a8::XParams()
|
||||
.SetSender(notifymsg)
|
||||
.SetParam1(notifymsg->seqid()),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
ss::SS_IM_GuildMemberUpdateRequest* notifymsg =
|
||||
(ss::SS_IM_GuildMemberUpdateRequest*)param.sender.GetUserData();
|
||||
SyncHelper::Instance()->SS_IM_GuildMemberUpdateRequest_TimeOut(notifymsg);
|
||||
},
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
ss::SS_IM_GuildMemberUpdateRequest* notifymsg =
|
||||
(ss::SS_IM_GuildMemberUpdateRequest*)param.sender.GetUserData();
|
||||
delete notifymsg;
|
||||
SyncHelper::Instance()->RemovePendingRequest(param.param1);
|
||||
}
|
||||
);
|
||||
InternalSyncGuildMemberUpdate(guild, member, reason, false);
|
||||
}
|
||||
|
||||
void SyncHelper::SyncGuildMemberUpdateOnlyOnline(Guild* guild,
|
||||
GuildMember* member,
|
||||
int reason)
|
||||
{
|
||||
InternalSyncGuildMemberUpdate(guild, member, reason, true);
|
||||
}
|
||||
|
||||
void SyncHelper::SyncGuildMemberQuit(Guild* guild,
|
||||
@ -137,34 +116,15 @@ void SyncHelper::SyncGuildMemberQuit(Guild* guild,
|
||||
const std::string& target_id,
|
||||
int reason)
|
||||
{
|
||||
ss::SS_IM_GuildMemberQuitRequest* notifymsg = new ss::SS_IM_GuildMemberQuitRequest;
|
||||
notifymsg->set_seqid(App::Instance()->NewUUID());
|
||||
notifymsg->set_guild_id(guild->GuildId());
|
||||
notifymsg->set_sender_id(sender_id);
|
||||
notifymsg->set_target_id(target_id);
|
||||
notifymsg->set_reason(reason);
|
||||
BroadcastIMConnMsg(*notifymsg);
|
||||
pending_request_hash_[notifymsg->seqid()] =
|
||||
a8::Timer::Instance()->AddDeadLineTimer
|
||||
(
|
||||
1000 * 10,
|
||||
a8::XParams()
|
||||
.SetSender(notifymsg)
|
||||
.SetParam1(notifymsg->seqid()),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
ss::SS_IM_GuildMemberQuitRequest* notifymsg =
|
||||
(ss::SS_IM_GuildMemberQuitRequest*)param.sender.GetUserData();
|
||||
SyncHelper::Instance()->SS_IM_GuildMemberQuitRequest_TimeOut(notifymsg);
|
||||
},
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
ss::SS_IM_GuildMemberQuitRequest* notifymsg =
|
||||
(ss::SS_IM_GuildMemberQuitRequest*)param.sender.GetUserData();
|
||||
delete notifymsg;
|
||||
SyncHelper::Instance()->RemovePendingRequest(param.param1);
|
||||
}
|
||||
);
|
||||
InternalSyncGuildMemberQuit(guild, sender_id, target_id, reason, false);
|
||||
}
|
||||
|
||||
void SyncHelper::SyncGuildMemberQuitOnlyOnline(Guild* guild,
|
||||
const std::string& sender_id,
|
||||
const std::string& target_id,
|
||||
int reason)
|
||||
{
|
||||
InternalSyncGuildMemberQuit(guild, sender_id, target_id, reason, true);
|
||||
}
|
||||
|
||||
void SyncHelper::BroadcastIMConnMsg(int msgid, ::google::protobuf::Message& msg)
|
||||
@ -311,3 +271,79 @@ void SyncHelper::SendIMConnMsg(int instance_id, int msgid, const ::google::proto
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SyncHelper::InternalSyncGuildMemberUpdate(Guild* guild,
|
||||
GuildMember* member,
|
||||
int reason,
|
||||
bool only_online)
|
||||
{
|
||||
ss::SS_IM_GuildMemberUpdateRequest* notifymsg = new ss::SS_IM_GuildMemberUpdateRequest;
|
||||
notifymsg->set_seqid(App::Instance()->NewUUID());
|
||||
notifymsg->set_guild_id(guild->GuildId());
|
||||
notifymsg->set_guild_job(guild->GetMemberJob(member->account_id));
|
||||
notifymsg->set_sender_id(member->account_id);
|
||||
notifymsg->set_target_id(member->account_id);
|
||||
notifymsg->set_reason(reason);
|
||||
BroadcastIMConnMsg(*notifymsg);
|
||||
if (!only_online) {
|
||||
pending_request_hash_[notifymsg->seqid()] =
|
||||
a8::Timer::Instance()->AddDeadLineTimer
|
||||
(
|
||||
1000 * 10,
|
||||
a8::XParams()
|
||||
.SetSender(notifymsg)
|
||||
.SetParam1(notifymsg->seqid()),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
ss::SS_IM_GuildMemberUpdateRequest* notifymsg =
|
||||
(ss::SS_IM_GuildMemberUpdateRequest*)param.sender.GetUserData();
|
||||
SyncHelper::Instance()->SS_IM_GuildMemberUpdateRequest_TimeOut(notifymsg);
|
||||
},
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
ss::SS_IM_GuildMemberUpdateRequest* notifymsg =
|
||||
(ss::SS_IM_GuildMemberUpdateRequest*)param.sender.GetUserData();
|
||||
delete notifymsg;
|
||||
SyncHelper::Instance()->RemovePendingRequest(param.param1);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void SyncHelper::InternalSyncGuildMemberQuit(Guild* guild,
|
||||
const std::string& sender_id,
|
||||
const std::string& target_id,
|
||||
int reason,
|
||||
bool only_online)
|
||||
{
|
||||
ss::SS_IM_GuildMemberQuitRequest* notifymsg = new ss::SS_IM_GuildMemberQuitRequest;
|
||||
notifymsg->set_seqid(App::Instance()->NewUUID());
|
||||
notifymsg->set_guild_id(guild->GuildId());
|
||||
notifymsg->set_sender_id(sender_id);
|
||||
notifymsg->set_target_id(target_id);
|
||||
notifymsg->set_reason(reason);
|
||||
BroadcastIMConnMsg(*notifymsg);
|
||||
if (!only_online) {
|
||||
pending_request_hash_[notifymsg->seqid()] =
|
||||
a8::Timer::Instance()->AddDeadLineTimer
|
||||
(
|
||||
1000 * 10,
|
||||
a8::XParams()
|
||||
.SetSender(notifymsg)
|
||||
.SetParam1(notifymsg->seqid()),
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
ss::SS_IM_GuildMemberQuitRequest* notifymsg =
|
||||
(ss::SS_IM_GuildMemberQuitRequest*)param.sender.GetUserData();
|
||||
SyncHelper::Instance()->SS_IM_GuildMemberQuitRequest_TimeOut(notifymsg);
|
||||
},
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
ss::SS_IM_GuildMemberQuitRequest* notifymsg =
|
||||
(ss::SS_IM_GuildMemberQuitRequest*)param.sender.GetUserData();
|
||||
delete notifymsg;
|
||||
SyncHelper::Instance()->RemovePendingRequest(param.param1);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -39,11 +39,18 @@ public:
|
||||
void SyncGuildMemberUpdate(Guild* guild,
|
||||
GuildMember* member,
|
||||
int reason);
|
||||
void SyncGuildMemberUpdateOnlyOnline(Guild* guild,
|
||||
GuildMember* member,
|
||||
int reason);
|
||||
|
||||
void SyncGuildMemberQuit(Guild* guild,
|
||||
const std::string& sender_id,
|
||||
const std::string& target_id,
|
||||
int reason);
|
||||
void SyncGuildMemberQuitOnlyOnline(Guild* guild,
|
||||
const std::string& sender_id,
|
||||
const std::string& target_id,
|
||||
int reason);
|
||||
|
||||
void _SS_IM_FriendAgreeResponse(f8::MsgHdr& hdr, const ss::SS_IM_FriendAgreeResponse& msg);
|
||||
void _SS_IM_FriendDeleteResponse(f8::MsgHdr& hdr, const ss::SS_IM_FriendDeleteResponse& msg);
|
||||
@ -58,6 +65,17 @@ private:
|
||||
void SS_IM_GuildMemberQuitRequest_TimeOut(ss::SS_IM_GuildMemberQuitRequest* msg);
|
||||
void SS_IM_GuildMemberUpdateRequest_TimeOut(ss::SS_IM_GuildMemberUpdateRequest* msg);
|
||||
|
||||
void InternalSyncGuildMemberUpdate(Guild* guild,
|
||||
GuildMember* member,
|
||||
int reason,
|
||||
bool only_online);
|
||||
|
||||
void InternalSyncGuildMemberQuit(Guild* guild,
|
||||
const std::string& sender_id,
|
||||
const std::string& target_id,
|
||||
int reason,
|
||||
bool only_online);
|
||||
|
||||
public:
|
||||
template <typename T>
|
||||
void BroadcastIMConnMsg(T& msg)
|
||||
|
Loading…
x
Reference in New Issue
Block a user