ActiveLib
Loading...
Searching...
No Matches
Subscriber.h
1
6#ifndef ACTIVE_EVENT_SUBSCRIBER
7#define ACTIVE_EVENT_SUBSCRIBER
8
9#include "Active/Event/Participant.h"
10
11#include <set>
12
13namespace active::event {
14
15 class Event;
16 class Publisher;
17
39 class Subscriber : public Participant {
40 public:
41
42 // MARK: - Types
43
45 using Unique = std::unique_ptr<Subscriber>;
47 using Shared = std::shared_ptr<Subscriber>;
49 using Weak = std::weak_ptr<Subscriber>;
51 using Subscription = std::set<NameID>;
52
54 enum class Action {
55 issue = 0,
56 suspend,
57 renew,
59 };
60
61 // MARK: - Constructors
62
67 Subscriber(int32_t priority = 0) { m_priority = priority; }
73 Subscriber(const utility::NameID& identity, int32_t priority = 0) : Participant{identity} { m_priority = priority; }
77 virtual ~Subscriber() = default;
78
79 // MARK: - Operators
80
86 bool operator== (const Subscriber& ref) const { return Participant::operator==(ref); }
92 bool operator!= (const Subscriber& ref) const { return !(*this == ref); }
93
94 // MARK: - Functions (const)
95
100 virtual bool getPriority() const { return m_priority; }
105 virtual Action action() const { return m_action; }
110 virtual Subscription subscription() const = 0;
111
112 // MARK: - Functions (mutating)
113
119 virtual bool receive(const Event& event) = 0;
120
121 protected:
122 friend class Publisher;
123
128 void setAction(Action action) { m_action = action; }
129
130 private:
132 int32_t m_priority = 0;
134 Action m_action = Action::issue;
135 };
136
137}
138
139#endif //ACTIVE_EVENT_SUBSCRIBER
Definition Event.h:28
Definition Participant.h:22
bool operator==(const Participant &ref) const
Definition Participant.h:41
Definition Publisher.h:26
Definition Subscriber.h:39
bool operator!=(const Subscriber &ref) const
Definition Subscriber.h:92
virtual bool getPriority() const
Definition Subscriber.h:100
std::unique_ptr< Subscriber > Unique
Unique pointer.
Definition Subscriber.h:45
virtual Action action() const
Definition Subscriber.h:105
std::shared_ptr< Subscriber > Shared
Shared pointer.
Definition Subscriber.h:47
virtual bool receive(const Event &event)=0
bool operator==(const Subscriber &ref) const
Definition Subscriber.h:86
Action
The action awaited by the subscriber.
Definition Subscriber.h:54
@ discontinue
The subscription is discontinued.
@ renew
The subscriber has to be discontinued and restarted (audit, attach etc)
void setAction(Action action)
Definition Subscriber.h:128
std::weak_ptr< Subscriber > Weak
Weak pointer.
Definition Subscriber.h:49
Subscriber(const utility::NameID &identity, int32_t priority=0)
Definition Subscriber.h:73
Subscriber(int32_t priority=0)
Definition Subscriber.h:67
std::set< NameID > Subscription
An event subscription list.
Definition Subscriber.h:51
virtual Subscription subscription() const =0
virtual ~Subscriber()=default
Definition NameID.h:21
Definition Event.h:13