#include <userver/concurrent/async_event_channel.hpp>
AsyncEventChannel is an in-process pub-sub with strict FIFO serialization, i.e. only after the event was processed a new event may appear for processing, same listener is never called concurrently.
Example usage:
Definition at line 79 of file async_event_channel.hpp.
Public Types | |
| using | Function = typename AsyncEventSource<Args...>::Function |
| using | OnRemoveCallback = std::function<void(const Function&)> |
Public Member Functions | |
| AsyncEventChannel (std::string_view name) | |
| The primary constructor. | |
| AsyncEventChannel (std::string_view name, OnRemoveCallback on_listener_removal) | |
| The constructor with AsyncEventSubscriberScope usage checking. | |
| template<typename UpdaterFunc> | |
| AsyncEventSubscriberScope | DoUpdateAndListen (FunctionId id, std::string_view name, Function &&func, UpdaterFunc &&updater) |
| For use in UpdateAndListen of specific event channels. | |
| template<typename Class, typename UpdaterFunc> | |
| AsyncEventSubscriberScope | DoUpdateAndListen (Class *obj, std::string_view name, void(Class::*func)(Args...), UpdaterFunc &&updater) |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. | |
| template<typename UpdaterFunc> | |
| void | DoUpdateAndListenScoped (utils::ResourceScopeStorage &scopes, FunctionId id, std::string_view name, Function &&func, UpdaterFunc &&updater) |
| Like DoUpdateAndListen, but binds the subscription to scopes. | |
| template<typename Class, typename UpdaterFunc> | |
| void | DoUpdateAndListenScoped (utils::ResourceScopeStorage &scopes, Class *obj, std::string_view name, void(Class::*func)(Args...), UpdaterFunc &&updater) |
| This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. | |
| void | SendEvent (Args... args) const |
| const std::string & | Name () const noexcept |
| AsyncEventSubscriberScope | AddListener (Class *obj, std::string_view name, void(Class::*func)(Args...)) |
| Subscribes to updates from this event source. | |
| using concurrent::AsyncEventChannel< Args >::Function = typename AsyncEventSource<Args...>::Function |
Definition at line 81 of file async_event_channel.hpp.
| using concurrent::AsyncEventChannel< Args >::OnRemoveCallback = std::function<void(const Function&)> |
Definition at line 82 of file async_event_channel.hpp.
|
inlineexplicit |
The primary constructor.
| name | used for diagnostic purposes and is also accessible with Name |
Definition at line 86 of file async_event_channel.hpp.
|
inline |
The constructor with AsyncEventSubscriberScope usage checking.
The constructor with a callback that is called on listener removal, both on Unsubscribe and on automatic teardown. The callback takes a reference to Function as input. This is useful for checking the lifetime of data captured by the listener update function.
Example usage:
| name | used for diagnostic purposes and is also accessible with Name |
| on_listener_removal | the callback used for check |
Definition at line 110 of file async_event_channel.hpp.
|
inlineinherited |
Subscribes to updates from this event source.
The listener won't be called immediately. To process the current value and then listen to updates, use UpdateAndListen of specific event channels.
Example usage:
| obj | the subscriber, which is the owner of the listener method, and is also used as the unique identifier of the subscription for this AsyncEventSource |
| name | the name of the subscriber, for diagnostic purposes |
| func | the listener method, usually called On<DataName>Update, e.g. OnConfigUpdate or OnCacheUpdate |
Definition at line 132 of file async_event_source.hpp.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 140 of file async_event_channel.hpp.
|
inline |
For use in UpdateAndListen of specific event channels.
Atomically calls updater, which should invoke func with the previously sent event, and subscribes to new events as if using AddListener.
| id | the subscriber class instance, see also a simpler DoUpdateAndListen overload below |
| name | the name of the subscriber |
| func | the callback that is called on each update |
| updater | the initial () -> void callback that should call func with the current value |
Definition at line 127 of file async_event_channel.hpp.
|
inline |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
Definition at line 201 of file async_event_channel.hpp.
|
inline |
Like DoUpdateAndListen, but binds the subscription to scopes.
Synchronously calls updater and subscribes with a stub that only records whether an event arrived during construction. When the scope is entered, updater is called again if an event was skipped, and the stub is replaced with func. Unsubscribe runs in utils::ResourceScopeStorage::BeforeDestruction.
obj and func) and capture this explicitly. Definition at line 164 of file async_event_channel.hpp.
|
inlinenoexcept |
Definition at line 270 of file async_event_channel.hpp.
|
inline |
Send the next event and wait until all the listeners process it.
Strict FIFO serialization is guaranteed, i.e. only after this event is processed a new event may be delivered for the subscribers, same listener/subscriber is never called concurrently.
Definition at line 222 of file async_event_channel.hpp.