diff --git a/server/imserver/synchelper.cc b/server/imserver/synchelper.cc index 32a30a9..189ade9 100644 --- a/server/imserver/synchelper.cc +++ b/server/imserver/synchelper.cc @@ -101,7 +101,34 @@ 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_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); + } + ); } void SyncHelper::SyncGuildMemberQuit(Guild* guild,