ActiveLib
Loading...
Searching...
No Matches
Publisher.h
1
6#ifndef ACTIVE_EVENT_PUBLISHER
7#define ACTIVE_EVENT_PUBLISHER
8
9#include "Active/Event/Participant.h"
10
11#include <mutex>
12#include <vector>
13
14namespace active::event {
15
16 class Event;
17 class Subscriber;
18
26 class Publisher : public Participant {
27 public:
28
29 // MARK: - Types
30
32 using Unique = std::unique_ptr<Publisher>;
34 using Shared = std::shared_ptr<Publisher>;
35
36 // MARK: - Constructors
37
42 Publisher(const utility::NameID& identity = utility::NameID{});
47 Publisher(const Publisher& source);
51 virtual ~Publisher();
52
53 // MARK: - Operators
54
60 Publisher& operator= (const Publisher& source);
61
62
63 // MARK: - Functions (mutating)
64
70 bool publish(const Event& event);
76 bool add(std::shared_ptr<Subscriber> subscriber);
82 bool addWeak(std::shared_ptr<Subscriber> subscriber);
88 template<class T, class... Args>
89 std::shared_ptr<T> add(Args&&... args) {
90 auto subscriber = std::make_shared<T>(std::forward<Args>(args)...);
91 return add(subscriber) ? subscriber : nullptr;
92 }
98 bool remove(const Subscriber& subscriber);
104 bool remove(const utility::Guid& id);
105
106 protected:
111 virtual bool audit() override;
116 virtual bool attach() override;
121 virtual bool start() override;
125 virtual void stop() override;
126
127 private:
128 class SubscriberList;
129 std::unique_ptr<SubscriberList> m_subscriber;
130 };
131
132}
133
134#endif //ACTIVE_EVENT_PUBLISHER
Definition Event.h:28
Definition Participant.h:22
Definition Publisher.h:26
bool remove(const Subscriber &subscriber)
Definition Publisher.cpp:300
std::shared_ptr< Publisher > Shared
Shared pointer.
Definition Publisher.h:34
virtual bool attach() override
Definition Publisher.cpp:337
virtual void stop() override
Definition Publisher.cpp:365
std::unique_ptr< Publisher > Unique
Unique pointer.
Definition Publisher.h:32
std::shared_ptr< T > add(Args &&... args)
Definition Publisher.h:89
bool addWeak(std::shared_ptr< Subscriber > subscriber)
Definition Publisher.cpp:287
Publisher & operator=(const Publisher &source)
Definition Publisher.cpp:242
bool add(std::shared_ptr< Subscriber > subscriber)
Definition Publisher.cpp:275
Publisher(const utility::NameID &identity=utility::NameID{})
Definition Publisher.cpp:214
virtual bool audit() override
Definition Publisher.cpp:322
virtual ~Publisher()
Definition Publisher.cpp:232
bool publish(const Event &event)
Definition Publisher.cpp:256
virtual bool start() override
Definition Publisher.cpp:352
Definition Subscriber.h:39
Definition Guid.h:16
Definition NameID.h:21
Definition Event.h:13