#pragma once #include #include #include #include #include namespace vanetza { namespace rpc { class AsioEventPort : public kj::EventPort { public: AsioEventPort(boost::asio::io_context& io); bool wait() override; bool poll() override; void setRunnable(bool runnable) override; void setLoop(kj::EventLoop* loop) { loop_.store(loop, std::memory_order_release); } kj::Timer& getTimer() { return timer_; } private: void advanceTime(); void armTimeout(); boost::asio::io_context& io_; boost::asio::steady_timer steady_timer_; std::atomic loop_ { nullptr }; const kj::MonotonicClock& clock_; kj::TimerImpl timer_; }; } // namespace rpc } // namespace vanetza