ifw-core  5.0.0-pre2
subscription.hpp
Go to the documentation of this file.
1 
9 #ifndef CORE_PROTOCOL_OPEN62541_SUBSCRIPTION_H_
10 #define CORE_PROTOCOL_OPEN62541_SUBSCRIPTION_H_
11 
12 #include <map>
13 #include <cassert>
14 #include <cstdio>
15 #include <fstream>
16 #include <iostream>
17 #include <memory>
18 #include <stdexcept>
19 #include <vector>
20 
21 // Third party header files
22 #include <open62541.h>
24 
25 namespace protocol::opcua {
26 
27 class IDataChangeHandler;
28 class Subscription;
29 
30 using SubscriptionPtr = std::shared_ptr<Subscription>;
31 using SubscriptionConstPtr = std::shared_ptr<const Subscription>;
32 
36 class Subscription {
37 public:
38 
47  static SubscriptionPtr Create(IDataChangeHandler* handler);
48 
50  ~Subscription();
51 
59  virtual void OnDataChange(
60  const UA_UInt32 monitor_id,
61  UA_DataValue* value
62  );
63 
77  UA_StatusCode AddMonitoredItem(UA_Client *client,
78  MonitoredItemPtr monitoredItem);
79 
89  UA_StatusCode AddMonitoredItems(UA_Client *client,
90  std::vector<MonitoredItemPtr>& mon_vector,
91  std::string& error_msg);
92 
93 
98  UA_StatusCode RemoveMonitoredItems(UA_Client *client, bool connection_active = true);
99 
104  virtual void onError();
105 
110  virtual void onStatusChange(bool status);
111 
116  UA_StatusCode AddSubscription(UA_Client *client, const UA_CreateSubscriptionRequest& request);
117 
121  UA_UInt32 GetSubscriptionId() const {
122  return m_subscription_id;
123  }
124 
125  void SetSubscriptionId(const UA_UInt32 id) {
126  m_subscription_id = id;
127  }
128 
129 public:
135 
136  std::map<std::shared_ptr<MonitoredItem>,
137  std::vector<IDataChangeHandler*> > m_dataChangeHandler;
138 
139  std::map<UA_Int32, std::shared_ptr<MonitoredItem>> m_monitored_items;
140 
141 
142  static void DataChangesCallback(UA_Client *client,
143  UA_UInt32 subId,
144  void *subContext,
145  UA_UInt32 monId,
146  void *context,
147  UA_DataValue *value);
148 
149  static void DeleteSubscriptionCallback(UA_Client *client, UA_UInt32 subscriptionId, void *subContext);
150 
151 private:
152  UA_Int32 m_subscription_id;
153  IDataChangeHandler* m_handler;
154 
156  log4cplus::Logger m_logger;
157 };
158 
159 }
160 
161 #endif // !ICORE_PROTOCOL_OPEN62541_SUBSCRIPTION_H_
The IDataChangeHandler class Defines an entry point for data change notifications.
Definition: iDataChangeHandler.hpp:35
Definition: subscription.hpp:36
std::map< std::shared_ptr< MonitoredItem >, std::vector< IDataChangeHandler * > > m_dataChangeHandler
Definition: subscription.hpp:137
UA_StatusCode AddMonitoredItems(UA_Client *client, std::vector< MonitoredItemPtr > &mon_vector, std::string &error_msg)
Add a vector of monitoring items.
Definition: subscription.cpp:49
UA_StatusCode AddMonitoredItem(UA_Client *client, MonitoredItemPtr monitoredItem)
Add an new monitoring item.
Definition: subscription.cpp:32
static void DeleteSubscriptionCallback(UA_Client *client, UA_UInt32 subscriptionId, void *subContext)
Definition: subscription.cpp:206
virtual void OnDataChange(const UA_UInt32 monitor_id, UA_DataValue *value)
Handler of data changes.
Definition: subscription.cpp:156
virtual void onStatusChange(bool status)
Handler for session status change.
Definition: subscription.cpp:174
UA_UInt32 GetSubscriptionId() const
Return subscription ID.
Definition: subscription.hpp:121
std::map< UA_Int32, std::shared_ptr< MonitoredItem > > m_monitored_items
Definition: subscription.hpp:139
UA_StatusCode AddSubscription(UA_Client *client, const UA_CreateSubscriptionRequest &request)
Definition: subscription.cpp:180
void SetSubscriptionId(const UA_UInt32 id)
Definition: subscription.hpp:125
static void DataChangesCallback(UA_Client *client, UA_UInt32 subId, void *subContext, UA_UInt32 monId, void *context, UA_DataValue *value)
Definition: subscription.cpp:189
UA_StatusCode RemoveMonitoredItems(UA_Client *client, bool connection_active=true)
RemoveMonitoredItem.
Definition: subscription.cpp:120
Subscription(IDataChangeHandler *handler)
Subscription.
Definition: subscription.cpp:24
~Subscription()
Definition: subscription.cpp:28
static SubscriptionPtr Create(IDataChangeHandler *handler)
Create a new subscription.
Definition: subscription.cpp:19
virtual void onError()
Handler for session communication errors.
Definition: subscription.cpp:169
log4cplus::Logger & Logger()
Definition: defines.cpp:13
Definition: iDataChangeHandler.hpp:25
std::shared_ptr< MonitoredItem > MonitoredItemPtr
Definition: monitoredItem.hpp:19
std::shared_ptr< Subscription > SubscriptionPtr
Definition: subscription.hpp:30
std::shared_ptr< const Subscription > SubscriptionConstPtr
Definition: subscription.hpp:31