dummy_supervisor.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //
  2. // Copyright (c) 2022-2024 Ivan Baidakou (basiliscos) (the dot dmol at gmail dot com)
  3. //
  4. // Distributed under the MIT Software License
  5. //
  6. #pragma once
  7. #include <rotor/supervisor.h>
  8. #include <unordered_map>
  9. namespace {
  10. namespace to {
  11. struct on_timer_trigger {};
  12. } // namespace to
  13. } // namespace
  14. namespace rotor {
  15. template <>
  16. inline auto rotor::actor_base_t::access<to::on_timer_trigger, request_id_t, bool>(request_id_t request_id,
  17. bool cancelled) noexcept {
  18. on_timer_trigger(request_id, cancelled);
  19. }
  20. } // namespace rotor
  21. struct dummy_supervisor_t : public rotor::supervisor_t {
  22. using rotor::supervisor_t::supervisor_t;
  23. using timers_map_t = std::unordered_map<rotor::request_id_t, rotor::timer_handler_base_t *>;
  24. timers_map_t timers_map;
  25. void do_start_timer(const rotor::pt::time_duration &, rotor::timer_handler_base_t &handler) noexcept override {
  26. timers_map.emplace(handler.request_id, &handler);
  27. }
  28. void do_cancel_timer(rotor::request_id_t timer_id) noexcept override {
  29. auto it = timers_map.find(timer_id);
  30. if (it != timers_map.end()) {
  31. auto &actor_ptr = it->second->owner;
  32. actor_ptr->access<to::on_timer_trigger, rotor::request_id_t, bool>(timer_id, true);
  33. timers_map.erase(it);
  34. }
  35. }
  36. void start() noexcept override {}
  37. void shutdown() noexcept override {}
  38. void enqueue(rotor::message_ptr_t) noexcept override {}
  39. };