diff --git a/server/imserver/player.cc b/server/imserver/player.cc index 1445fb3..bf2abae 100644 --- a/server/imserver/player.cc +++ b/server/imserver/player.cc @@ -838,10 +838,26 @@ void Player::SyncOtherFriend() void Player::ProcessEventTimerFunc() { + if (curr_max_event_idx_ >= DBEngine::Instance()->GetEventCurrIdx(myself.crc32_code)) { + return; + } + if (last_event_idx_ >= curr_max_event_idx_) { + curr_max_event_idx_ = DBEngine::Instance()->GetEventCurrIdx(myself.crc32_code); + } + if (last_event_idx_ >= curr_max_event_idx_) { + return; + } + auto on_ok = [] (a8::XParams& param, const f8::DataSet* data_set) { - + std::string account_id = param.sender.GetString(); + long long curr_max_event_idx = param.param1; + long long last_event_idx = param.param2; + Player* hum = PlayerMgr::Instance()->GetPlayerByAccountId(account_id); + if (hum) { + hum->ProcessEvent(curr_max_event_idx, data_set); + } }; auto on_error = [] (a8::XParams& param, int error_code, const std::string& error_msg) @@ -854,16 +870,26 @@ void Player::ProcessEventTimerFunc() ( conn_info, "SELECT idx, sender_id, target_id, event_name, param1, param2, " - " param3, event_data, status, createtime" + " param3, event_data, status, createtime " "FROM `event' WHERE idx > %d AND target_id='%s' AND status=0;", { last_event_idx_, myself.base_data.account_id }, a8::XParams() - .SetSender(myself.base_data.account_id), + .SetSender(myself.base_data.account_id) + .SetParam1(curr_max_event_idx_) + .SetParam1(last_event_idx_), on_ok, on_error, myself.crc32_code ); } + +void Player::ProcessEvent(long long max_event_idx, const f8::DataSet* data_set) +{ + curr_max_event_idx_ = max_event_idx; + if (data_set) { + + } +} diff --git a/server/imserver/player.h b/server/imserver/player.h index e150518..2862e23 100644 --- a/server/imserver/player.h +++ b/server/imserver/player.h @@ -120,6 +120,7 @@ private: void PushFriendList(); void SyncOtherFriend(); void ProcessEventTimerFunc(); + void ProcessEvent(long long max_event_idx, const f8::DataSet* data_set); private: bool dirty_ = false; @@ -127,6 +128,7 @@ private: timer_list* update_user_info_timer_ = nullptr; long long last_apply_idx_ = 0; long long last_event_idx_ = 0; + long long curr_max_event_idx_ = 0; std::map friend_hash_; std::map apply_hash_;