9 #ifndef CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
10 #define CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
20 #include <log4cplus/logger.h>
21 #include <open62541.h>
31 using namespace std::literals::chrono_literals;
34 class IDataChangeHandler;
45 std::atomic<bool> m_connected {
false};
46 std::atomic<bool> m_lost_connection {
false};
48 UA_StatusCode m_last_error{0};
49 UA_SecureChannelState m_last_channel_state{UA_SECURECHANNELSTATE_CLOSED};
50 UA_SecureChannelState m_channel_state{UA_SECURECHANNELSTATE_CLOSED};
51 UA_SessionState m_last_session_state{UA_SESSIONSTATE_CLOSED};
52 UA_SessionState m_session_state{UA_SESSIONSTATE_CLOSED};
53 UA_StatusCode m_last_connect_status{UA_STATUSCODE_BADCONNECTIONCLOSED};
54 UA_StatusCode m_connect_status{UA_STATUSCODE_GOOD};
68 static constexpr std::chrono::milliseconds NETWORK_TIMEOUT = 2000ms;
81 virtual void Connect(
const std::string& device,
const std::string& address);
111 virtual void Rpc(
const std::string& obj,
112 const std::string& proc,
122 UA_StatusCode ResumeSubscriptions();
135 virtual void StartMonitorItem(
const std::string& item)
override;
149 virtual void StartMonitorItems(
const std::vector<std::string>& item_vector)
override;
158 virtual void StopMonitorItem(
const std::string& item)
override;
166 virtual void Disconnect();
186 void SetEndpoint(
const std::string &endpoint);
191 std::string GetEndpoint()
const;
198 virtual void HandleDataChange(
const std::shared_ptr<MonitoredItem> monitor_item,
199 UA_DataValue* value);
204 virtual void HandleSessionChanges(
bool status);
209 void UpdateState(UA_SecureChannelState channel_state,
210 UA_SessionState session_state,
211 UA_StatusCode recovery_status);
216 inline static std::map<std::string, std::shared_ptr<OpcuaConnection>>
225 bool IsConnected(
const std::string &address);
231 void InactivityAcions();
242 UA_StatusCode CreateSubscription(
bool renew_monitor_items =
false);
248 void RemoveSubscription();
256 void GetNodeId(std::string value,
int &ns, std::string &name);
264 static void InactivityCallback(UA_Client *client);
271 static void StateCallback(UA_Client *client,
272 UA_SecureChannelState channelState,
273 UA_SessionState sessionState,
274 UA_StatusCode recoveryStatus);
282 std::string m_endpoint;
288 inline static std::map<std::string, std::pair<std::string, Open62541*>> m_registration_map;
291 std::string m_device;
294 std::map<std::string, MonitoredItemPtr> m_map_monitor_items;
The IDataChangeHandler class Defines an entry point for data change notifications.
Definition: iDataChangeHandler.hpp:35
The Open62541 class.
Definition: open62541.hpp:66
static std::map< std::string, std::shared_ptr< OpcuaConnection > > m_connection_map
Definition: open62541.hpp:217
log4cplus::Logger & Logger()
Definition: defines.cpp:13
std::string Write(const char *format,...)
Create formatted string, return formatted string (C formatting convention).
std::vector< PairVariant > VectorVariant
Definition: iComm.hpp:39
boost::variant< bool, int, unsigned int, short, double, std::string > Variant
Definition: iComm.hpp:27
Definition: iDataChangeHandler.hpp:25
std::shared_ptr< Subscription > SubscriptionPtr
Definition: subscription.hpp:30
Connection Struct.
Definition: open62541.hpp:43
UA_Client * m_client
Definition: open62541.hpp:44
std::mutex m_mutex
Definition: open62541.hpp:55