SVCS - Русская документация
Загрузка...
Поиск...
Не найдено
Класс svcs::services::EventBus

Потокобезопасная реализация ISubject для централизованного распределения событий. Подробнее...

#include <EventBus.hxx>

Граф наследования:svcs::services::EventBus:
svcs::services::ISubject

Открытые члены

 ~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, чтобы гарантировать, что валидные общие указатели на шину могут быть созданы даже внутри его функций-членов.

Методы

◆ attach()

void svcs::services::EventBus::attach ( std::shared_ptr< IObserver > observer)
inlineoverridevirtual

Регистрирует нового Observer.

Общий указатель наблюдателя хранится как слабый указатель внутри.

Аргументы
observerУмный указатель на Observer для регистрации.

Замещает svcs::services::ISubject.

◆ detach()

void svcs::services::EventBus::detach ( std::shared_ptr< IObserver > observer_to_remove)
inlineoverridevirtual

Отменяет регистрацию конкретного Observer.

Сравнивает предоставленный shared_ptr со всеми хранимыми объектами weak_ptr.

Аргументы
observer_to_removeУмный указатель на Observer для удаления.

Замещает svcs::services::ISubject.

◆ notify()

void svcs::services::EventBus::notify ( const Event & event) const
inlineoverridevirtual

Отправляет событие всем активным Observers.

Перебирает список, безопасно блокируя каждый слабый указатель перед вызовом update(). Невалидные (истекшие) слабые указатели эффективно игнорируются.

Аргументы
eventКонстантная ссылка на событие для публикации.

Замещает svcs::services::ISubject.


Объявления и описания членов класса находятся в файле: