From 3ebe020780bbebad4fc9120f5cab8c17bdda140d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 23 Jun 2020 15:37:46 +0800 Subject: [PATCH] 1 --- server/imserver/player.cc | 15 ++++++++++++--- server/imserver/player.h | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 02b7948..63c7f56 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -916,6 +916,9 @@ void Player::ProcessEventTimerFunc() if (curr_max_event_idx_ >= DBEngine::Instance()->GetEventCurrIdx(myself.crc32_code)) { return; } + if (event_fetching_) { + return; + } if (last_event_idx_ >= curr_max_event_idx_) { curr_max_event_idx_ = DBEngine::Instance()->GetEventCurrIdx(myself.crc32_code); } @@ -931,15 +934,22 @@ void Player::ProcessEventTimerFunc() long long last_event_idx = param.param2; Player* hum = PlayerMgr::Instance()->GetPlayerByAccountId(account_id); if (hum) { + hum->event_fetching_ = false; hum->last_event_idx_ = curr_max_event_idx; - hum->OnFetchEvent(curr_max_event_idx, data_set); + hum->OnFetchEvent(data_set); } }; auto on_error = [] (a8::XParams& param, int error_code, const std::string& error_msg) { + std::string account_id = param.sender.GetString(); + Player* hum = PlayerMgr::Instance()->GetPlayerByAccountId(account_id); + if (hum) { + hum->event_fetching_ = false; + } }; + event_fetching_ = true; a8::XObject conn_info = DBEngine::Instance()->GetConnInfo(myself.crc32_code); DBEngine::Instance()->ExecAsyncQuery ( @@ -962,9 +972,8 @@ void Player::ProcessEventTimerFunc() ); } -void Player::OnFetchEvent(long long max_event_idx, const f8::DataSet* data_set) +void Player::OnFetchEvent(const f8::DataSet* data_set) { - curr_max_event_idx_ = max_event_idx; if (data_set) { for (auto& row : *data_set) { Event event; diff --git a/server/imserver/player.h b/server/imserver/player.h index 21a141e..1b85133 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -123,7 +123,7 @@ private: void PushFriendList(); void SyncOtherFriend(); void ProcessEventTimerFunc(); - void OnFetchEvent(long long max_event_idx, const f8::DataSet* data_set); + void OnFetchEvent(const f8::DataSet* data_set); void ProcessEvent(); void OnFriendAgreeEvent(Event& event); void OnFriendDeleteEvent(Event& event); @@ -142,6 +142,7 @@ private: long long last_apply_idx_ = 0; long long last_event_idx_ = 0; long long curr_max_event_idx_ = 0; + bool event_fetching_ = false; long long last_run_tick_ = 0; std::map event_hash_; int red_point_flags_ = 0;