|
SVCS - Русская документация
|
Потокобезопасная реализация ISubject для централизованного распределения событий. Подробнее...
#include <EventBus.hxx>
Открытые члены | |
| ~EventBus () override=default | |
| Виртуальный деструктор по умолчанию. | |
| void | attach (std::shared_ptr< IObserver > observer) override |
| Регистрирует нового Observer. | |
| void | detach (std::shared_ptr< IObserver > observer_to_remove) override |
| Отменяет регистрацию конкретного Observer. | |
| void | notify (const Event &event) const override |
| Отправляет событие всем активным Observers. | |
| Открытые члены унаследованные от svcs::services::ISubject | |
| virtual | ~ISubject ()=default |
| Виртуальный деструктор. | |
Дополнительные унаследованные члены | |
| Защищенные данные унаследованные от svcs::services::ISubject | |
| std::vector< IObserver * > | observers |
| Коллекция зарегистрированных наблюдателей. | |
Потокобезопасная реализация ISubject для централизованного распределения событий.
Этот класс использует std::weak_ptr для хранения наблюдателей, предотвращая циклические зависимости и обеспечивая автоматическую очистку уничтоженных наблюдателей. Он наследуется от std::enable_shared_from_this, чтобы гарантировать, что валидные общие указатели на шину могут быть созданы даже внутри его функций-членов.
|
inlineoverridevirtual |
Регистрирует нового Observer.
Общий указатель наблюдателя хранится как слабый указатель внутри.
| observer | Умный указатель на Observer для регистрации. |
Замещает svcs::services::ISubject.
|
inlineoverridevirtual |
Отменяет регистрацию конкретного Observer.
Сравнивает предоставленный shared_ptr со всеми хранимыми объектами weak_ptr.
| observer_to_remove | Умный указатель на Observer для удаления. |
Замещает svcs::services::ISubject.
|
inlineoverridevirtual |
Отправляет событие всем активным Observers.
Перебирает список, безопасно блокируя каждый слабый указатель перед вызовом update(). Невалидные (истекшие) слабые указатели эффективно игнорируются.
| event | Константная ссылка на событие для публикации. |
Замещает svcs::services::ISubject.