rotor
Event loop friendly C++ actor micro-framework
Loading...
Searching...
No Matches
lifetime.h
1#pragma once
2
3//
4// Copyright (c) 2019-2023 Ivan Baidakou (basiliscos) (the dot dmol at gmail dot com)
5//
6// Distributed under the MIT Software License
7//
8
9#include "plugin_base.h"
10
11namespace rotor::plugin {
12
21struct ROTOR_API lifetime_plugin_t : public plugin_base_t {
23
25 static const std::type_index class_identity;
26
27 const std::type_index &identity() const noexcept override;
28
29 void activate(actor_base_t *actor) noexcept override;
30 void deactivate() noexcept override;
31
34
36 void unsubscribe(const handler_ptr_t &h, const address_ptr_t &addr) noexcept;
37
44 void unsubscribe(const subscription_info_ptr_t &info) noexcept;
45
50 virtual void on_subscription(message::subscription_t &) noexcept;
51
56 virtual void on_unsubscription(message::unsubscription_t &) noexcept;
57
62 virtual void on_unsubscription_external(message::unsubscription_external_t &) noexcept;
63
64 bool handle_unsubscription(const subscription_point_t &point, bool external) noexcept override;
65
66 bool handle_shutdown(message::shutdown_request_t *message) noexcept override;
67
69 template <typename T> auto &access() noexcept;
70
71 private:
72 void unsubscribe() noexcept;
73
76
77 bool ready_to_shutdown() noexcept;
78};
79
80} // namespace rotor::plugin
namespace for rotor core messages (which just transform payloads)
Definition messages.hpp:317
intrusive_ptr_t< handler_base_t > handler_ptr_t
intrusive pointer for handler
Definition forward.hpp:26
intrusive_ptr_t< address_t > address_ptr_t
intrusive pointer for address
Definition address.hpp:57
intrusive_ptr_t< subscription_info_t > subscription_info_ptr_t
intrusive pointer for subscription_info_t
Definition subscription_point.h:121
universal primitive of concurrent computation
Definition actor_base.h:47
manages all actor subscriptions (i.e. from plugins or actor itself).
Definition lifetime.h:21
virtual void on_unsubscription_external(message::unsubscription_external_t &) noexcept
reaction on external unsubscription
const std::type_index & identity() const noexcept override
returns pointer, which uniquely identifiess plugin type
bool handle_unsubscription(const subscription_point_t &point, bool external) noexcept override
polls plugin, whether it is done with unsubscription
plugin_base_t()=default
default plugin ctor
static const std::type_index class_identity
Definition lifetime.h:25
void unsubscribe(const handler_ptr_t &h, const address_ptr_t &addr) noexcept
alias for unsubscription trigger (see below)
virtual void on_subscription(message::subscription_t &) noexcept
reaction on subscription
void initate_subscription(const subscription_info_ptr_t &info) noexcept
records initial subscription information
void deactivate() noexcept override
deactivates plugin from an actor
virtual void on_unsubscription(message::unsubscription_t &) noexcept
reaction on unsubscription
bool handle_shutdown(message::shutdown_request_t *message) noexcept override
polls plugin, whether it is done with shutdown
void activate(actor_base_t *actor) noexcept override
invoked by actor upon initialization.
auto & access() noexcept
generic non-public fields accessor
plugin_base_t()=default
default plugin ctor
actor_base_t * actor
non-owning actor pointer
Definition plugin_base.h:179
list of subscription_info_ptr_t with possibility to find via subscription_point_t
Definition subscription_point.h:126
pair of handler_base_t linked to particular address_t
Definition subscription_point.h:49
Holds and classifies message handlers on behalf of supervisor.
Definition subscription.h:30