Friendly LWM2M client
InstSubject.h
Go to the documentation of this file.
1 #ifndef WPP_INST_SUBJECT_H_
2 #define WPP_INST_SUBJECT_H_
3 
4 #include "ItemOp.h"
5 #include "InstOpObserver.h"
6 #include "InstEventObserver.h"
7 
8 namespace wpp {
9 
10 class Instance;
11 
21 class InstSubject {
22 public:
30  void opSubscribe(InstOpObserver *observer) {
31  if (!observer) return;
32  if (std::find(_opObservers.begin(), _opObservers.end(), observer) == _opObservers.end())
33  _opObservers.push_back(observer);
34  }
35 
41  void opUnsubscribe(InstOpObserver *observer) {
42  _opObservers.erase(std::find(_opObservers.begin(), _opObservers.end(), observer));
43  }
44 
53  if (!observer) return;
54  if (std::find(_eventObservers.begin(), _eventObservers.end(), observer) == _eventObservers.end())
55  _eventObservers.push_back(observer);
56  }
57 
64  _eventObservers.erase(std::find(_eventObservers.begin(), _eventObservers.end(), observer));
65  }
66 
67 protected:
78  void operationNotify(Instance &inst, const ResLink &resLink, ItemOp::TYPE type) {
79  for(InstOpObserver *observer : _opObservers) {
80  switch (type) {
81  case ItemOp::WRITE:
82  observer->resourceWrite(inst, resLink);
83  break;
84  case ItemOp::EXECUTE:
85  observer->resourceExecute(inst, resLink);
86  break;
87  default: break;
88  }
89  }
90  }
91 
100  void eventNotify(Instance &inst, EVENT_ID_T eventId) {
101  for(InstEventObserver *observer : _eventObservers) observer->instEvent(inst, eventId);
102  }
103 
104 private:
105  std::vector<InstOpObserver*> _opObservers;
106  std::vector<InstEventObserver*> _eventObservers;
107 };
108 
109 }
110 
111 #endif //WPP_INST_SUBJECT_H_
The InstEventObserver class is an abstract base class that defines the interface for observing instan...
The InstOpObserver class is an abstract base class that defines the interface for observing instance ...
The InstSubject class represents a subject that allows subscribers to be notified about various event...
Definition: InstSubject.h:21
void eventSubscribe(InstEventObserver *observer)
Subscribes an observer to receive notifications about custom instance events.
Definition: InstSubject.h:52
void opUnsubscribe(InstOpObserver *observer)
Unsubscribes an observer from receiving notifications about instance resource operations.
Definition: InstSubject.h:41
void opSubscribe(InstOpObserver *observer)
Subscribes an observer to receive notifications about instance resource operations.
Definition: InstSubject.h:30
void operationNotify(Instance &inst, const ResLink &resLink, ItemOp::TYPE type)
Notifies the observers about an operation on an instance resource.
Definition: InstSubject.h:78
void eventNotify(Instance &inst, EVENT_ID_T eventId)
Notifies the observers about a custom instance event.
Definition: InstSubject.h:100
void eventUnsubscribe(InstEventObserver *observer)
Unsubscribes an observer from receiving notifications about custom instance events.
Definition: InstSubject.h:63
Instance is interface class that implements manipulation with derived class resources....
Definition: Instance.h:40
The WppConnection class represents a connection interface for the Wpp library.
Definition: WppClient.cpp:14
uint8_t EVENT_ID_T
Definition: WppTypes.h:18
TYPE
Enum representing the different types of operations.
Definition: ItemOp.h:29
@ EXECUTE
Definition: ItemOp.h:33