123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #pragma once
- #include "plugin_base.h"
- #include <unordered_set>
- #include "rotor/detail/child_info.h"
- namespace rotor::plugin {
- struct child_manager_plugin_t : public plugin_base_t {
- using plugin_base_t::plugin_base_t;
-
- static const void *class_identity;
- const void *identity() const noexcept override;
- void activate(actor_base_t *actor) noexcept override;
- void deactivate() noexcept override;
-
- virtual void create_child(const actor_ptr_t &actor) noexcept;
-
- virtual void spawn(factory_t factory, const pt::time_duration &period, restart_policy_t policy, size_t max_attempts,
- bool escalate) noexcept;
-
- virtual void remove_child(const actor_base_t &actor) noexcept;
-
- virtual void on_shutdown_fail(actor_base_t &actor, const extended_error_ptr_t &ec) noexcept;
-
- virtual void on_create(message::create_actor_t &message) noexcept;
-
- virtual void on_init(message::init_response_t &message) noexcept;
-
- virtual void on_shutdown_trigger(message::shutdown_trigger_t &message) noexcept;
-
- virtual void on_shutdown_confirm(message::shutdown_response_t &message) noexcept;
-
- virtual void on_spawn(message::spawn_actor_t &message) noexcept;
- bool handle_init(message::init_request_t *) noexcept override;
- bool handle_shutdown(message::shutdown_request_t *) noexcept override;
- void handle_start(message::start_trigger_t *message) noexcept override;
- bool handle_unsubscription(const subscription_point_t &point, bool external) noexcept override;
-
- template <typename T> auto &access() noexcept;
- private:
- using actors_map_t = std::unordered_map<address_ptr_t, detail::child_info_ptr_t>;
- using spawning_map_t = std::unordered_map<request_id_t, detail::child_info_ptr_t>;
- bool has_initializing() const noexcept;
- void init_continue() noexcept;
- void request_shutdown(const extended_error_ptr_t &ec) noexcept;
- void cancel_init(const actor_base_t *child) noexcept;
- void request_shutdown(detail::child_info_t &child_state, const extended_error_ptr_t &ec) noexcept;
- void on_spawn_timer(request_id_t timer_id, bool cancelled) noexcept;
- size_t active_actors() noexcept;
-
- using initializing_actors_t = std::unordered_set<address_ptr_t>;
-
- actors_map_t actors_map;
- spawning_map_t spawning_map;
- };
- }
|