ifw-core 6.0.0
Loading...
Searching...
No Matches
subscription.hpp
Go to the documentation of this file.
1
8#ifndef CORE_PROTOCOL_OPEN62541_SUBSCRIPTION_H_
9#define CORE_PROTOCOL_OPEN62541_SUBSCRIPTION_H_
10
11#include <map>
12#include <cassert>
13#include <cstdio>
14#include <fstream>
15#include <iostream>
16#include <memory>
17#include <stdexcept>
18#include <vector>
19
20// Third party header files
21#ifdef UA_ENABLE_AMALGAMATION
22# include <open62541.h>
23#else
24# include <open62541/types.h>
25# include <open62541/client.h>
26#endif
28
30
31class IDataChangeHandler;
32class Subscription;
33
34using SubscriptionPtr = std::shared_ptr<Subscription>;
35using SubscriptionConstPtr = std::shared_ptr<const Subscription>;
36
41public:
42
52
55
63 virtual void OnDataChange(
64 const UA_UInt32 monitor_id,
65 UA_DataValue* value
66 );
67
81 UA_StatusCode AddMonitoredItem(UA_Client* client,
82 MonitoredItemPtr monitoredItem);
83
93 UA_StatusCode AddMonitoredItems(UA_Client* client,
94 std::vector<MonitoredItemPtr>& mon_vector,
95 std::string& error_msg);
96
97
102 UA_StatusCode RemoveMonitoredItems(UA_Client* client, bool connection_active = true);
103
108 virtual void onError();
109
114 virtual void onStatusChange(bool status);
115
120 UA_StatusCode AddSubscription(UA_Client* client, const UA_CreateSubscriptionRequest& request);
121
125 UA_UInt32 GetSubscriptionId() const {
126 return m_subscription_id;
127 }
128
129 void SetSubscriptionId(const UA_UInt32 id) {
130 m_subscription_id = id;
131 }
132
133public:
139
140 std::map<std::shared_ptr<MonitoredItem>,
141 std::vector<IDataChangeHandler*> > m_dataChangeHandler;
142
143 std::map<UA_Int32, std::shared_ptr<MonitoredItem>> m_monitored_items;
144
145
146 static void DataChangesCallback(UA_Client* client,
147 UA_UInt32 subId,
148 void* subContext,
149 UA_UInt32 monId,
150 void* context,
151 UA_DataValue* value);
152
153 static void DeleteSubscriptionCallback(UA_Client* client, UA_UInt32 subscriptionId,
154 void* subContext);
155
156private:
157 UA_Int32 m_subscription_id;
158 IDataChangeHandler* m_handler;
159
161 log4cplus::Logger m_logger;
162};
163
164}
165
166#endif // !ICORE_PROTOCOL_OPEN62541_SUBSCRIPTION_H_
The IDataChangeHandler class Defines an entry point for data change notifications.
Definition iDataChangeHandler.hpp:37
Definition subscription.hpp:40
static void DataChangesCallback(UA_Client *client, UA_UInt32 subId, void *subContext, UA_UInt32 monId, void *context, UA_DataValue *value)
Definition subscription.cpp:204
void SetSubscriptionId(const UA_UInt32 id)
Definition subscription.hpp:129
static void DeleteSubscriptionCallback(UA_Client *client, UA_UInt32 subscriptionId, void *subContext)
Definition subscription.cpp:220
virtual void onStatusChange(bool status)
Handler for session status change.
Definition subscription.cpp:189
UA_StatusCode AddMonitoredItems(UA_Client *client, std::vector< MonitoredItemPtr > &mon_vector, std::string &error_msg)
Add a vector of monitoring items.
Definition subscription.cpp:52
~Subscription()
Definition subscription.cpp:31
std::map< UA_Int32, std::shared_ptr< MonitoredItem > > m_monitored_items
Definition subscription.hpp:143
UA_StatusCode AddSubscription(UA_Client *client, const UA_CreateSubscriptionRequest &request)
Definition subscription.cpp:193
std::map< std::shared_ptr< MonitoredItem >, std::vector< IDataChangeHandler * > > m_dataChangeHandler
Definition subscription.hpp:141
UA_StatusCode RemoveMonitoredItems(UA_Client *client, bool connection_active=true)
RemoveMonitoredItem.
Definition subscription.cpp:135
Subscription(IDataChangeHandler *handler)
Subscription.
Definition subscription.cpp:27
virtual void onError()
Handler for session communication errors.
Definition subscription.cpp:186
virtual void OnDataChange(const UA_UInt32 monitor_id, UA_DataValue *value)
Handler of data changes.
Definition subscription.cpp:174
UA_UInt32 GetSubscriptionId() const
Return subscription ID.
Definition subscription.hpp:125
static SubscriptionPtr Create(IDataChangeHandler *handler)
Create a new subscription.
Definition subscription.cpp:23
UA_StatusCode AddMonitoredItem(UA_Client *client, MonitoredItemPtr monitoredItem)
Add an new monitoring item.
Definition subscription.cpp:35
taskPoll class header file.
Definition iDataChangeHandler.hpp:28
std::shared_ptr< const Subscription > SubscriptionConstPtr
Definition subscription.hpp:35
std::shared_ptr< MonitoredItem > MonitoredItemPtr
Definition monitoredItem.hpp:23
std::shared_ptr< Subscription > SubscriptionPtr
Definition subscription.hpp:34