From 59f8b0ac362f3681fa5392f2f0de043578d628dd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Oct 2020 13:34:57 +0800 Subject: [PATCH] 1 --- server/imserver/guild.cc | 24 ++++++++++++++++++++++-- server/imserver/guild.h | 3 +++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/server/imserver/guild.cc b/server/imserver/guild.cc index 2d8e9d6..b9cda6e 100644 --- a/server/imserver/guild.cc +++ b/server/imserver/guild.cc @@ -30,11 +30,26 @@ enum GuildApplyStatus_e void Guild::Init() { + last_active_time_ = App::Instance()->nowtime; + last_saveok_time_ = App::Instance()->nowtime; logdb_ = new ss::MFGuildLogDB; for (size_t i = 0; i < kGuildJobMax; ++i) { job_hash_.push_back(std::set()); } RecalcRedPoint(); + a8::Timer::Instance()->AddRepeatTimerAndAttach + ( + 1000 * 60, + a8::XParams() + .SetSender(this), + [] (const a8::XParams& param) + { + Guild* guild = (Guild*)param.sender.GetUserData(); + if (App::Instance()->nowtime - guild->last_active_time_ < 300) { + guild->SaveToDB(); + } + }, + &timer_attacher_.timer_list_); } void Guild::UnInit() @@ -1014,6 +1029,7 @@ void Guild::UpdateMemberOffline(const std::string& account_id) void Guild::Active() { + last_active_time_ = App::Instance()->nowtime; if (App::Instance()->nowtime - last_query_member_time_ > 15) { QueryMemberOnlineState(); last_query_member_time_ = App::Instance()->nowtime; @@ -1121,7 +1137,10 @@ void Guild::SaveToDB() auto on_ok = [] (a8::XParams& param, const f8::DataSet* data_set) { - + Guild* guild = GuildMgr::Instance()->GetGuild(param.sender); + if (guild) { + guild->last_saveok_time_ = App::Instance()->nowtime; + } }; auto on_error = [] (a8::XParams& param, int error_code, const std::string& error_msg) @@ -1165,7 +1184,8 @@ void Guild::SaveToDB() guild_status_ == kGuildDismissed ? GuildId() : 0, guild_id_ }, - a8::XParams(), + a8::XParams() + .SetSender(GuildId()), on_ok, on_error, guild_id_ diff --git a/server/imserver/guild.h b/server/imserver/guild.h index 17fd045..edba9fc 100644 --- a/server/imserver/guild.h +++ b/server/imserver/guild.h @@ -118,6 +118,9 @@ private: time_t last_query_member_time_ = 0; a8::TimerAttacher timer_attacher_; + time_t last_active_time_ = 0; + time_t last_saveok_time_ = 0; + public: static Guild* CreateGuild(int gameid, long long guild_id,