9#include "open62541pp/config.hpp"
21#ifdef UA_ENABLE_SUBSCRIPTIONS
82std::unique_ptr<SubscriptionContext> createSubscriptionContext(
88void storeSubscriptionContext(
89 Client& connection,
IntegerId subscriptionId, std::unique_ptr<SubscriptionContext>&& context
111 bool publishingEnabled,
116#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
123template <
typename CompletionToken>
129 CompletionToken&& token
131 auto context = detail::createSubscriptionContext(
132 connection, std::move(statusChangeCallback), std::move(deleteCallback)
134 auto* contextPtr = context.get();
135 return detail::AsyncServiceAdapter<CreateSubscriptionResponse>::initiate(
141 detail::SubscriptionContext* innerContextPtr
144 opcua::detail::getHandle(connection),
147 detail::SubscriptionContext::statusChangeCallbackNative,
148 detail::SubscriptionContext::deleteCallbackNative,
156 if (detail::getServiceResult(response).isGood()) {
157 detail::storeSubscriptionContext(
162 std::forward<CompletionToken>(token)
170template <
typename CompletionToken>
174 bool publishingEnabled,
177 CompletionToken&& token
179 const auto request = detail::makeCreateSubscriptionRequest(parameters, publishingEnabled);
182 asWrapper<CreateSubscriptionRequest>(request),
183 std::move(statusChangeCallback),
184 std::move(deleteCallback),
185 std::forward<CompletionToken>(token)
211 const auto request = detail::makeModifySubscriptionRequest(subscriptionId, parameters);
215#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
221template <
typename CompletionToken>
225 return detail::AsyncServiceAdapter<ModifySubscriptionResponse>::initiate(
233 opcua::detail::getHandle(connection),
240 std::forward<CompletionToken>(token),
246template <
typename CompletionToken>
251 CompletionToken&& token
253 const auto request = detail::makeModifySubscriptionRequest(subscriptionId, parameters);
256 asWrapper<ModifySubscriptionRequest>(request),
257 std::forward<CompletionToken>(token)
286template <
typename CompletionToken>
290 return detail::sendRequestAsync<SetPublishingModeRequest, SetPublishingModeResponse>(
291 connection, request, std::forward<CompletionToken>(token)
304 const auto request = detail::makeSetPublishingModeRequest(publishing, {&subscriptionId, 1});
305 return detail::getSingleStatus(
315template <
typename CompletionToken>
317 Client& connection,
IntegerId subscriptionId,
bool publishing, CompletionToken&& token
319 const auto request = detail::makeSetPublishingModeRequest(publishing, {&subscriptionId, 1});
322 asWrapper<SetPublishingModeRequest>(request),
323 detail::TransformToken(
324 detail::getSingleStatus<UA_SetPublishingModeResponse>,
325 std::forward<CompletionToken>(token)
347#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
353template <
typename CompletionToken>
357 return detail::AsyncServiceAdapter<DeleteSubscriptionsResponse>::initiate(
365 opcua::detail::getHandle(connection),
372 std::forward<CompletionToken>(token),
384 const auto request = detail::makeDeleteSubscriptionsRequest(subscriptionId);
385 return detail::getSingleStatus(
390#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
396template <
typename CompletionToken>
400 const auto request = detail::makeDeleteSubscriptionsRequest(subscriptionId);
403 asWrapper<DeleteSubscriptionsRequest>(request),
404 detail::TransformToken{
405 detail::getSingleStatus<UA_DeleteSubscriptionsResponse>,
406 std::forward<CompletionToken>(token)
UA_StatusCode wrapper class.
UA_CreateSubscriptionRequest wrapper class.
UA_CreateSubscriptionResponse wrapper class.
IntegerId subscriptionId() const noexcept
UA_DeleteSubscriptionsRequest wrapper class.
UA_DeleteSubscriptionsResponse wrapper class.
UA_ModifySubscriptionRequest wrapper class.
UA_ModifySubscriptionResponse wrapper class.
UA_SetPublishingModeRequest wrapper class.
UA_SetPublishingModeResponse wrapper class.
UA_StatusChangeNotification wrapper class.
void(* UA_ClientAsyncServiceCallback)(UA_Client *client, void *userdata, UA_UInt32 requestId, void *response)
UA_StatusCode UA_Client_Subscriptions_create_async(UA_Client *client, const UA_CreateSubscriptionRequest request, void *subscriptionContext, UA_Client_StatusChangeNotificationCallback statusChangeCallback, UA_Client_DeleteSubscriptionCallback deleteCallback, UA_ClientAsyncServiceCallback callback, void *userdata, UA_UInt32 *requestId)
UA_StatusCode UA_Client_Subscriptions_delete_async(UA_Client *client, const UA_DeleteSubscriptionsRequest request, UA_ClientAsyncServiceCallback callback, void *userdata, UA_UInt32 *requestId)
UA_StatusCode UA_Client_Subscriptions_modify_async(UA_Client *client, const UA_ModifySubscriptionRequest request, UA_ClientAsyncServiceCallback callback, void *userdata, UA_UInt32 *requestId)
auto createSubscriptionAsync(Client &connection, const CreateSubscriptionRequest &request, StatusChangeNotificationCallback statusChangeCallback, DeleteSubscriptionCallback deleteCallback, CompletionToken &&token)
Create a subscription.
std::function< void(IntegerId subId, StatusChangeNotification ¬ification)> StatusChangeNotificationCallback
Subscription status change notification callback.
std::function< void(IntegerId subId)> DeleteSubscriptionCallback
Subscription deletion callback.
CreateSubscriptionResponse createSubscription(Client &connection, const CreateSubscriptionRequest &request, StatusChangeNotificationCallback statusChangeCallback, DeleteSubscriptionCallback deleteCallback)
Create a subscription.
DeleteSubscriptionsResponse deleteSubscriptions(Client &connection, const DeleteSubscriptionsRequest &request) noexcept
Delete subscriptions.
StatusCode deleteSubscription(Client &connection, IntegerId subscriptionId) noexcept
Delete a single subscription.
auto deleteSubscriptionsAsync(Client &connection, const DeleteSubscriptionsRequest &request, CompletionToken &&token)
Delete subscriptions.
auto deleteSubscriptionAsync(Client &connection, IntegerId subscriptionId, CompletionToken &&token)
Delete a single subscription.
ModifySubscriptionResponse modifySubscription(Client &connection, const ModifySubscriptionRequest &request) noexcept
Modify a subscription.
auto modifySubscriptionAsync(Client &connection, const ModifySubscriptionRequest &request, CompletionToken &&token)
Modify a subscription.
SetPublishingModeResponse setPublishingMode(Client &connection, const SetPublishingModeRequest &request) noexcept
Enable/disable publishing of notification messages of subscriptions.
auto setPublishingModeAsync(Client &connection, const SetPublishingModeRequest &request, CompletionToken &&token)
Enable/disable publishing of notification messages of subscriptions.
constexpr T::NativeType * asNative(T *wrapper) noexcept
Cast Wrapper object pointers to native object pointers.
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.
Subscription parameters with default values from open62541.
uint8_t priority
Relative priority of the subscription. Notifications with higher priority are sent first.
uint32_t maxKeepAliveCount
Send keep-alive message after defined publishing cycles without notifications.
uint32_t maxNotificationsPerPublish
The maximum number of notifications per publish (0 if unlimited).
uint32_t lifetimeCount
Delete the subscription after defined publishing cycles without sending any notifications.
double publishingInterval
Cyclic interval in milliseconds that the subscription is requested to return notifications.