1
This commit is contained in:
parent
a234e85917
commit
af8009344b
@ -62,7 +62,8 @@ enum GuildMemberQuitReason
|
|||||||
{
|
{
|
||||||
kGuildKick = 0,
|
kGuildKick = 0,
|
||||||
kGuildQuit = 1,
|
kGuildQuit = 1,
|
||||||
kGuildDismisss = 2
|
kGuildDismisss = 2,
|
||||||
|
kGuildUpdate = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum GuildMemberUpdateReason
|
enum GuildMemberUpdateReason
|
||||||
@ -71,6 +72,7 @@ enum GuildMemberUpdateReason
|
|||||||
kGuildUpdateReasonAgree = 1,
|
kGuildUpdateReasonAgree = 1,
|
||||||
kGuildUpdateReasonSetJob = 2,
|
kGuildUpdateReasonSetJob = 2,
|
||||||
kGuildUpdateReasonInherit = 3,
|
kGuildUpdateReasonInherit = 3,
|
||||||
|
kGuildUpdateReasonUpdate = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* const PROJ_NAME_FMT = "friend_imserver";
|
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());
|
GuildMember* member = GetMember(forward_msg->context().user_info().base_data().account_id());
|
||||||
if (member) {
|
if (member) {
|
||||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonJoin);
|
SyncHelper::Instance()->SyncGuildMemberUpdateOnlyOnline(this, member, kGuildUpdateReasonJoin);
|
||||||
} else {
|
} else {
|
||||||
DBHelper::Instance()->AddGuildApply(this, forward_msg->context().user_info());
|
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;
|
cs::SMGuildAgree respmsg;
|
||||||
GuildMember* member = GetMember(msg.apply().base_data().account_id());
|
GuildMember* member = GetMember(msg.apply().base_data().account_id());
|
||||||
if (member) {
|
if (member) {
|
||||||
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonAgree);
|
SyncHelper::Instance()->SyncGuildMemberUpdateOnlyOnline(this, member, kGuildUpdateReasonAgree);
|
||||||
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
GuildMgr::Instance()->ForwardGuildSMMsg(hdr.socket_handle,
|
||||||
forward_msg->context(),
|
forward_msg->context(),
|
||||||
respmsg);
|
respmsg);
|
||||||
@ -462,6 +462,14 @@ void Guild::_CMGuildQuit(f8::MsgHdr& hdr, const cs::CMGuildQuit& msg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
SaveToDB();
|
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, sender, kGuildUpdateReasonSetJob);
|
||||||
|
SyncHelper::Instance()->SyncGuildMemberUpdate(this, member, kGuildUpdateReasonSetJob);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto p = respmsg.add_chged_members();
|
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();
|
member->online = user_info.base_data()._online();
|
||||||
TypeConvert::Convert(user_info.temp_custom_data(), member->temp_custom_data);
|
TypeConvert::Convert(user_info.temp_custom_data(), member->temp_custom_data);
|
||||||
member->last_update_time = App::Instance()->nowtime;
|
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,
|
GuildMember* member,
|
||||||
int reason)
|
int reason)
|
||||||
{
|
{
|
||||||
ss::SS_IM_GuildMemberUpdateRequest* notifymsg = new ss::SS_IM_GuildMemberUpdateRequest;
|
InternalSyncGuildMemberUpdate(guild, member, reason, false);
|
||||||
notifymsg->set_seqid(App::Instance()->NewUUID());
|
}
|
||||||
notifymsg->set_guild_id(guild->GuildId());
|
|
||||||
notifymsg->set_guild_job(guild->GetMemberJob(member->account_id));
|
void SyncHelper::SyncGuildMemberUpdateOnlyOnline(Guild* guild,
|
||||||
notifymsg->set_sender_id(member->account_id);
|
GuildMember* member,
|
||||||
notifymsg->set_target_id(member->account_id);
|
int reason)
|
||||||
notifymsg->set_reason(reason);
|
{
|
||||||
BroadcastIMConnMsg(*notifymsg);
|
InternalSyncGuildMemberUpdate(guild, member, reason, true);
|
||||||
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::SyncGuildMemberQuit(Guild* guild,
|
void SyncHelper::SyncGuildMemberQuit(Guild* guild,
|
||||||
@ -137,34 +116,15 @@ void SyncHelper::SyncGuildMemberQuit(Guild* guild,
|
|||||||
const std::string& target_id,
|
const std::string& target_id,
|
||||||
int reason)
|
int reason)
|
||||||
{
|
{
|
||||||
ss::SS_IM_GuildMemberQuitRequest* notifymsg = new ss::SS_IM_GuildMemberQuitRequest;
|
InternalSyncGuildMemberQuit(guild, sender_id, target_id, reason, false);
|
||||||
notifymsg->set_seqid(App::Instance()->NewUUID());
|
}
|
||||||
notifymsg->set_guild_id(guild->GuildId());
|
|
||||||
notifymsg->set_sender_id(sender_id);
|
void SyncHelper::SyncGuildMemberQuitOnlyOnline(Guild* guild,
|
||||||
notifymsg->set_target_id(target_id);
|
const std::string& sender_id,
|
||||||
notifymsg->set_reason(reason);
|
const std::string& target_id,
|
||||||
BroadcastIMConnMsg(*notifymsg);
|
int reason)
|
||||||
pending_request_hash_[notifymsg->seqid()] =
|
{
|
||||||
a8::Timer::Instance()->AddDeadLineTimer
|
InternalSyncGuildMemberQuit(guild, sender_id, target_id, reason, true);
|
||||||
(
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SyncHelper::BroadcastIMConnMsg(int msgid, ::google::protobuf::Message& msg)
|
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,
|
void SyncGuildMemberUpdate(Guild* guild,
|
||||||
GuildMember* member,
|
GuildMember* member,
|
||||||
int reason);
|
int reason);
|
||||||
|
void SyncGuildMemberUpdateOnlyOnline(Guild* guild,
|
||||||
|
GuildMember* member,
|
||||||
|
int reason);
|
||||||
|
|
||||||
void SyncGuildMemberQuit(Guild* guild,
|
void SyncGuildMemberQuit(Guild* guild,
|
||||||
const std::string& sender_id,
|
const std::string& sender_id,
|
||||||
const std::string& target_id,
|
const std::string& target_id,
|
||||||
int reason);
|
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_FriendAgreeResponse(f8::MsgHdr& hdr, const ss::SS_IM_FriendAgreeResponse& msg);
|
||||||
void _SS_IM_FriendDeleteResponse(f8::MsgHdr& hdr, const ss::SS_IM_FriendDeleteResponse& 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_GuildMemberQuitRequest_TimeOut(ss::SS_IM_GuildMemberQuitRequest* msg);
|
||||||
void SS_IM_GuildMemberUpdateRequest_TimeOut(ss::SS_IM_GuildMemberUpdateRequest* 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:
|
public:
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void BroadcastIMConnMsg(T& msg)
|
void BroadcastIMConnMsg(T& msg)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user