// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #pragma once #include "td/telegram/net/NetQuery.h" #include "td/actor/actor.h" #include "td/utils/Time.h" #include namespace td { class DelayDispatcher final : public Actor { public: DelayDispatcher(double default_delay, ActorShared<> parent) : default_delay_(default_delay), parent_(std::move(parent)) { } void send_with_callback(NetQueryPtr query, ActorShared callback); void send_with_callback_and_delay(NetQueryPtr query, ActorShared callback, double delay); void close_silent(); private: struct Query { NetQueryPtr net_query; ActorShared callback; double delay; }; std::queue queue_; Timestamp wakeup_at_; double default_delay_; ActorShared<> parent_; void loop() final; void tear_down() final; }; } // namespace td