10#include "open62541pp/config.hpp"
22#ifdef UA_ENABLE_SUBSCRIPTIONS
111std::vector<std::unique_ptr<MonitoredItemContext>> createMonitoredItemContexts(
119void convertMonitoredItemContexts(
120 Span<
const std::unique_ptr<MonitoredItemContext>> contexts,
127void storeMonitoredItemContexts(
131 Span<std::unique_ptr<MonitoredItemContext>> contexts
152#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
159template <
typename CompletionToken>
165 CompletionToken&& token
167 auto contexts = detail::createMonitoredItemContexts(
168 connection, request, std::move(dataChangeCallback), {}, std::move(deleteCallback)
170 std::vector<detail::MonitoredItemContext*> contextsPtr(contexts.size());
171 std::vector<UA_Client_DataChangeNotificationCallback> dataChangeCallbacks(contexts.size());
172 std::vector<UA_Client_DeleteMonitoredItemCallback> deleteCallbacks(contexts.size());
173 detail::convertMonitoredItemContexts(
174 contexts, contextsPtr, dataChangeCallbacks, {}, deleteCallbacks
176 return detail::AsyncServiceAdapter<CreateMonitoredItemsResponse>::initiate(
180 opcua::detail::getHandle(connection),
182 reinterpret_cast<void**
>(contextsPtr.data()),
183 dataChangeCallbacks.data(),
184 deleteCallbacks.data(),
193 contexts = std::move(contexts)](
const auto& response)
mutable {
194 detail::storeMonitoredItemContexts(connection, subscriptionId, response, contexts);
196 std::forward<CompletionToken>(token)
227#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
235template <
typename CompletionToken>
244 CompletionToken&& token
246 auto item = detail::createMonitoredItemCreateRequest(itemToMonitor, monitoringMode, parameters);
247 const auto request = detail::createCreateMonitoredItemsRequest(
248 subscriptionId, parameters.
timestamps, {&item, 1}
253 std::move(dataChangeCallback),
254 std::move(deleteCallback),
255 detail::TransformToken(
256 detail::wrapSingleResultWithStatus<
259 std::forward<CompletionToken>(token)
281#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
288template <
typename CompletionToken>
294 CompletionToken&& token
296 auto contexts = detail::createMonitoredItemContexts(
297 connection, request, {}, std::move(eventCallback), std::move(deleteCallback)
299 std::vector<detail::MonitoredItemContext*> contextsPtr(contexts.size());
300 std::vector<UA_Client_EventNotificationCallback> eventCallbacks(contexts.size());
301 std::vector<UA_Client_DeleteMonitoredItemCallback> deleteCallbacks(contexts.size());
302 detail::convertMonitoredItemContexts(
303 contexts, contextsPtr, {}, eventCallbacks, deleteCallbacks
305 return detail::AsyncServiceAdapter<CreateMonitoredItemsResponse>::initiate(
309 opcua::detail::getHandle(connection),
311 reinterpret_cast<void**
>(contextsPtr.data()),
312 eventCallbacks.data(),
313 deleteCallbacks.data(),
322 contexts = std::move(contexts)](
const auto& response)
mutable {
323 detail::storeMonitoredItemContexts(connection, subscriptionId, response, contexts);
325 std::forward<CompletionToken>(token)
353#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
360template <
typename CompletionToken>
369 CompletionToken&& token
371 auto item = detail::createMonitoredItemCreateRequest(itemToMonitor, monitoringMode, parameters);
372 const auto request = detail::createCreateMonitoredItemsRequest(
373 subscriptionId, parameters.
timestamps, {&item, 1}
378 std::move(eventCallback),
379 std::move(deleteCallback),
380 detail::TransformToken(
381 detail::wrapSingleResultWithStatus<
384 std::forward<CompletionToken>(token)
408#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
414template <
typename CompletionToken>
418 return detail::AsyncServiceAdapter<ModifyMonitoredItemsResponse>::initiate(
421 throwIfBad(UA_Client_MonitoredItems_modify_async(
422 opcua::detail::getHandle(connection),
asNative(request), callback, userdata,
nullptr
425 std::forward<CompletionToken>(token)
444 auto item = detail::createMonitoredItemModifyRequest(monitoredItemId, parameters);
445 auto request = detail::createModifyMonitoredItemsRequest(subscriptionId, parameters, item);
449 return detail::wrapSingleResultWithStatus<MonitoredItemModifyResult>(response);
452#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
458template <
typename CompletionToken>
464 CompletionToken&& token
466 auto item = detail::createMonitoredItemModifyRequest(monitoredItemId, parameters);
467 auto request = detail::createModifyMonitoredItemsRequest(subscriptionId, parameters, item);
471 detail::TransformToken(
472 detail::wrapSingleResultWithStatus<
475 std::forward<CompletionToken>(token)
504template <
typename CompletionToken>
508 return detail::sendRequestAsync<SetMonitoringModeRequest, SetMonitoringModeResponse>(
509 connection, request, std::forward<CompletionToken>(token)
527 const auto request = detail::createSetMonitoringModeRequest(
528 subscriptionId, {&monitoredItemId, 1}, monitoringMode
530 return detail::getSingleStatus(
540template <
typename CompletionToken>
546 CompletionToken&& token
548 const auto request = detail::createSetMonitoringModeRequest(
549 subscriptionId, {&monitoredItemId, 1}, monitoringMode
554 detail::TransformToken(
555 detail::getSingleStatus<SetMonitoringModeResponse>, std::forward<CompletionToken>(token)
586template <
typename CompletionToken>
590 return detail::sendRequestAsync<SetTriggeringRequest, SetTriggeringResponse>(
591 connection, request, std::forward<CompletionToken>(token)
613#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
619template <
typename CompletionToken>
623 return detail::AsyncServiceAdapter<DeleteMonitoredItemsResponse>::initiate(
627 opcua::detail::getHandle(connection),
asNative(request), callback, userdata,
nullptr
630 std::forward<CompletionToken>(token)
646#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
652template <
typename CompletionToken>
656 const auto request = detail::createDeleteMonitoredItemsRequest(
657 subscriptionId, {&monitoredItemId, 1}
662 detail::TransformToken(
663 detail::getSingleStatus<DeleteMonitoredItemsResponse>,
664 std::forward<CompletionToken>(token)
Client * asWrapper(UA_Client *client) noexcept
Convert native UA_Client pointer to its wrapper instance.
UA_DataValue wrapper class.
UA_ExtensionObject wrapper class.
View to a contiguous sequence of objects, similar to std::span in C++20.
UA_StatusCode wrapper class.
UA_CreateMonitoredItemsRequest wrapper class.
IntegerId subscriptionId() const noexcept
UA_CreateMonitoredItemsResponse wrapper class.
UA_DeleteMonitoredItemsRequest wrapper class.
UA_DeleteMonitoredItemsResponse wrapper class.
UA_ModifyMonitoredItemsRequest wrapper class.
UA_CreateMonitoredItemsResponse wrapper class.
UA_MonitoredItemCreateResult wrapper class.
UA_MonitoredItemModifyResult wrapper class.
UA_ReadValueId wrapper class.
UA_SetMonitoringModeRequest wrapper class.
UA_SetMonitoringModeResponse wrapper class.
UA_SetTriggeringRequest wrapper class.
UA_SetTriggeringResponse wrapper class.
void(* UA_ClientAsyncServiceCallback)(UA_Client *client, void *userdata, UA_UInt32 requestId, void *response)
UA_StatusCode UA_Client_MonitoredItems_createEvents_async(UA_Client *client, const UA_CreateMonitoredItemsRequest request, void **contexts, UA_Client_EventNotificationCallback *callbacks, UA_Client_DeleteMonitoredItemCallback *deleteCallbacks, UA_ClientAsyncServiceCallback createCallback, void *userdata, UA_UInt32 *requestId)
UA_StatusCode UA_Client_MonitoredItems_delete_async(UA_Client *client, const UA_DeleteMonitoredItemsRequest request, UA_ClientAsyncServiceCallback callback, void *userdata, UA_UInt32 *requestId)
UA_StatusCode UA_Client_MonitoredItems_createDataChanges_async(UA_Client *client, const UA_CreateMonitoredItemsRequest request, void **contexts, UA_Client_DataChangeNotificationCallback *callbacks, UA_Client_DeleteMonitoredItemCallback *deleteCallbacks, UA_ClientAsyncServiceCallback createCallback, void *userdata, UA_UInt32 *requestId)
CreateMonitoredItemsResponse createMonitoredItemsDataChange(Client &connection, const CreateMonitoredItemsRequest &request, DataChangeNotificationCallback dataChangeCallback, DeleteMonitoredItemCallback deleteCallback)
Create and add monitored items to a subscription for data change notifications.
MonitoredItemCreateResult createMonitoredItemEvent(Client &connection, IntegerId subscriptionId, const ReadValueId &itemToMonitor, MonitoringMode monitoringMode, const MonitoringParametersEx ¶meters, EventNotificationCallback eventCallback, DeleteMonitoredItemCallback deleteCallback={})
Create and add a monitored item to a subscription for event notifications.
auto createMonitoredItemsEventAsync(Client &connection, const CreateMonitoredItemsRequest &request, EventNotificationCallback eventCallback, DeleteMonitoredItemCallback deleteCallback, CompletionToken &&token)
Create and add monitored items to a subscription for event notifications.
auto createMonitoredItemEventAsync(Client &connection, IntegerId subscriptionId, const ReadValueId &itemToMonitor, MonitoringMode monitoringMode, const MonitoringParametersEx ¶meters, EventNotificationCallback eventCallback, DeleteMonitoredItemCallback deleteCallback, CompletionToken &&token)
Create and add a monitored item to a subscription for event notifications.
std::function< void(IntegerId subId, IntegerId monId)> DeleteMonitoredItemCallback
MonitoredItem deletion callback.
MonitoredItemCreateResult createMonitoredItemDataChange(T &connection, IntegerId subscriptionId, const ReadValueId &itemToMonitor, MonitoringMode monitoringMode, const MonitoringParametersEx ¶meters, DataChangeNotificationCallback dataChangeCallback, DeleteMonitoredItemCallback deleteCallback)
Create and add a monitored item to a subscription for data change notifications.
auto createMonitoredItemDataChangeAsync(Client &connection, IntegerId subscriptionId, const ReadValueId &itemToMonitor, MonitoringMode monitoringMode, const MonitoringParametersEx ¶meters, DataChangeNotificationCallback dataChangeCallback, DeleteMonitoredItemCallback deleteCallback, CompletionToken &&token)
CreateMonitoredItemsResponse createMonitoredItemsEvent(Client &connection, const CreateMonitoredItemsRequest &request, EventNotificationCallback eventCallback, DeleteMonitoredItemCallback deleteCallback)
Create and add monitored items to a subscription for event notifications.
std::function< void(IntegerId subId, IntegerId monId, const DataValue &value)> DataChangeNotificationCallback
Data change notification callback.
auto createMonitoredItemsDataChangeAsync(Client &connection, const CreateMonitoredItemsRequest &request, DataChangeNotificationCallback dataChangeCallback, DeleteMonitoredItemCallback deleteCallback, CompletionToken &&token)
Create and add monitored items to a subscription for data change notifications.
std::function< void(IntegerId subId, IntegerId monId, Span< const Variant > eventFields)> EventNotificationCallback
Event notification callback.
StatusCode deleteMonitoredItem(T &connection, IntegerId subscriptionId, IntegerId monitoredItemId)
Delete a monitored item from a subscription.
auto deleteMonitoredItemAsync(Client &connection, IntegerId subscriptionId, IntegerId monitoredItemId, CompletionToken &&token)
Delete a monitored item from a subscription.
DeleteMonitoredItemsResponse deleteMonitoredItems(Client &connection, const DeleteMonitoredItemsRequest &request) noexcept
Delete monitored items from a subscription.
auto deleteMonitoredItemsAsync(Client &connection, const DeleteMonitoredItemsRequest &request, CompletionToken &&token)
Delete monitored items from a subscription.
ModifyMonitoredItemsResponse modifyMonitoredItems(Client &connection, const ModifyMonitoredItemsRequest &request) noexcept
Modify monitored items of a subscription.
MonitoredItemModifyResult modifyMonitoredItem(Client &connection, IntegerId subscriptionId, IntegerId monitoredItemId, const MonitoringParametersEx ¶meters) noexcept
Modify a monitored item of a subscription.
auto modifyMonitoredItemsAsync(Client &connection, const ModifyMonitoredItemsRequest &request, CompletionToken &&token)
Modify monitored items of a subscription.
auto modifyMonitoredItemAsync(Client &connection, IntegerId subscriptionId, IntegerId monitoredItemId, const MonitoringParametersEx ¶meters, CompletionToken &&token)
auto setMonitoringModeAsync(Client &connection, const SetMonitoringModeRequest &request, CompletionToken &&token)
Set the monitoring mode of monitored items.
SetMonitoringModeResponse setMonitoringMode(Client &connection, const SetMonitoringModeRequest &request) noexcept
Set the monitoring mode of monitored items.
SetTriggeringResponse setTriggering(Client &connection, const SetTriggeringRequest &request) noexcept
Add and delete triggering links of monitored items.
auto setTriggeringAsync(Client &connection, const SetTriggeringRequest &request, CompletionToken &&token)
Add and delete triggering links of monitored items.
constexpr NativeType * asNative(WrapperType *wrapper) noexcept
Cast Wrapper object pointers to native object pointers.
MonitoringMode
Monitoring mode.
TimestampsToReturn
Timestamps to return.
OPC UA services as free functions.
uint32_t IntegerId
IntegerId.
constexpr void throwIfBad(UA_StatusCode code)
Check the status code and throw a BadStatus exception if the status code is bad.
Extended monitoring parameters with default values from open62541.
uint32_t queueSize
Size of the MonitoringItem queue.
TimestampsToReturn timestamps
Timestamps to be transmitted.
ExtensionObject filter
Filter is used by the server to determine if the MonitoredItem should generate notifications.
double samplingInterval
Interval in milliseconds that defines the fastest rate at which the MonitoredItem should be accessed ...
bool discardOldest
Discard policy when the queue is full.