Chi-Tech
EventPublisher.cc
Go to the documentation of this file.
1#include "EventPublisher.h"
2
5
6#include "chi_runtime.h"
7#include "chi_log.h"
8
9#include <algorithm>
10
11namespace chi
12{
13
14EventPublisher::EventPublisher(const std::string& name) : publisher_name_(name)
15{
16}
17
19{
20 size_t subs = 0;
21 for (auto& subscriber_wptr : subscribers_)
22 if (auto subscriber_sptr = subscriber_wptr.lock())
23 {
24 subscriber_sptr->ReceiveEventUpdate(event);
25 ++subs;
26 }
27 if (Chi::log.GetVerbosity() >= 1)
29 << publisher_name_ << " published event name \"" << event.Name() << "\"";
30}
31
33 std::shared_ptr<chi::EventSubscriber>& subscriber_sptr)
34{
35 std::weak_ptr<chi::EventSubscriber> wptr = subscriber_sptr;
36
37 auto it =
38 std::find_if(subscribers_.begin(),
39 subscribers_.end(),
40 [&wptr](const std::weak_ptr<chi::EventSubscriber>& ptr1)
41 { return ptr1.lock() == wptr.lock(); });
42
43 if (it == subscribers_.end()) subscribers_.push_back(std::move(wptr));
44}
45
46} // namespace chi
static chi::ChiLog & log
Definition: chi_runtime.h:81
LogStream Log0Verbose1()
Definition: chi_log.h:234
EventPublisher(const std::string &name)
std::vector< std::weak_ptr< chi::EventSubscriber > > subscribers_
void AddSubscriber(std::shared_ptr< chi::EventSubscriber > &subscriber_sptr)
const std::string publisher_name_
virtual void PublishEvent(const chi::Event &event)