rad  4.0.0
smSubscriber.hpp
Go to the documentation of this file.
1 
9 #ifndef RAD_SM_SUBSCRIBER_HPP
10 #define RAD_SM_SUBSCRIBER_HPP
11 
12 #include <rad/mal/subscriber.hpp>
13 #include <rad/smAdapter.hpp>
14 
15 namespace rad {
16 
26 template <typename TOPIC_TYPE, typename EVENT_TYPE>
27 class SMSubscriber : public rad::cii::Subscriber<TOPIC_TYPE> {
28  public:
38  SMSubscriber(const elt::mal::Uri& uri, SMAdapter& sm,
39  const std::optional<elt::mal::Mal::Properties> mal_properties = {})
41  std::bind(&SMSubscriber::Callback, this,
42  std::placeholders::_1, std::placeholders::_2),
43  mal_properties),
44  m_sm(sm) {
46  }
47 
48  void Callback(elt::mal::ps::Subscriber<TOPIC_TYPE>& subscriber,
49  const elt::mal::ps::DataEvent<TOPIC_TYPE>& event) {
51 
52  if (event.hasValidData()) {
53  LOG4CPLUS_DEBUG(GetLogger(), "Received topic, posting event to SM via ASIO.");
54  m_sm.PostEvent(rad::UniqueEvent(new EVENT_TYPE(event.getData())));
55  } else {
56  LOG4CPLUS_WARN(GetLogger(), "Received invalid data!");
57  }
58  }
59 
60  SMSubscriber(const SMSubscriber&) = delete;
61  SMSubscriber& operator=(const SMSubscriber&) = delete;
62 
63  // Enable moving ??
64  // SMSubscriber(SMSubscriber&& rhs) = default;
65 
66  private:
67  rad::SMAdapter& m_sm;
68 };
69 
70 } // namespace rad
71 
72 #endif // RAD_SM_SUBSCRIBER_HPP
subscriber.hpp
SubscriberSM class header file.
rad::SMAdapter
Definition: smAdapter.hpp:60
RAD_TRACE
#define RAD_TRACE(logger)
Definition: logger.hpp:24
rad::SMSubscriber::SMSubscriber
SMSubscriber(const SMSubscriber &)=delete
smAdapter.hpp
SMAdapter class header file.
rad::SMSubscriber::SMSubscriber
SMSubscriber(const elt::mal::Uri &uri, SMAdapter &sm, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition: smSubscriber.hpp:38
rad::SMSubscriber
Definition: smSubscriber.hpp:27
rad::SMSubscriber::operator=
SMSubscriber & operator=(const SMSubscriber &)=delete
rad
Definition: oldbAdapter.hpp:26
rad::GetLogger
log4cplus::Logger & GetLogger()
Definition: logger.cpp:68
rad::SMSubscriber::Callback
void Callback(elt::mal::ps::Subscriber< TOPIC_TYPE > &subscriber, const elt::mal::ps::DataEvent< TOPIC_TYPE > &event)
Definition: smSubscriber.hpp:48
rad::UniqueEvent
std::unique_ptr< AnyEvent > UniqueEvent
Definition: anyEvent.hpp:45
rad::SMAdapter::PostEvent
void PostEvent(SharedEvent e)
Definition: smAdapter.cpp:262
rad::cii::Subscriber
Definition: subscriber.hpp:32