dummy_supervisor.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #pragma once
  2. #include <rotor/supervisor.h>
  3. #include <unordered_map>
  4. namespace {
  5. namespace to {
  6. struct on_timer_trigger {};
  7. } // namespace to
  8. } // namespace
  9. namespace rotor {
  10. template <>
  11. inline auto rotor::actor_base_t::access<to::on_timer_trigger, request_id_t, bool>(request_id_t request_id,
  12. bool cancelled) noexcept {
  13. on_timer_trigger(request_id, cancelled);
  14. }
  15. } // namespace rotor
  16. struct dummy_supervisor_t : public rotor::supervisor_t {
  17. using rotor::supervisor_t::supervisor_t;
  18. using timers_map_t = std::unordered_map<rotor::request_id_t, rotor::timer_handler_base_t *>;
  19. timers_map_t timers_map;
  20. void do_start_timer(const rotor::pt::time_duration &, rotor::timer_handler_base_t &handler) noexcept override {
  21. timers_map.emplace(handler.request_id, &handler);
  22. }
  23. void do_cancel_timer(rotor::request_id_t timer_id) noexcept override {
  24. auto it = timers_map.find(timer_id);
  25. auto &actor_ptr = it->second->owner;
  26. actor_ptr->access<to::on_timer_trigger, rotor::request_id_t, bool>(timer_id, true);
  27. timers_map.erase(it);
  28. }
  29. void start() noexcept override {}
  30. void shutdown() noexcept override {}
  31. void enqueue(rotor::message_ptr_t) noexcept override {}
  32. };