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 return detail::AsyncServiceAdapter<CreateSubscriptionResponse>::initiate(
137 throwIfBad(UA_Client_Subscriptions_create_async(
138 opcua::detail::getHandle(connection),
141 detail::SubscriptionContext::statusChangeCallbackNative,
142 detail::SubscriptionContext::deleteCallbackNative,
150 if (detail::getServiceResult(response).isGood()) {
151 detail::storeSubscriptionContext(
152 connection, response.subscriptionId(), std::move(context)
156 std::forward<CompletionToken>(token)
162template <
typename CompletionToken>
166 bool publishingEnabled,
169 CompletionToken&& token
171 const auto request = detail::createCreateSubscriptionRequest(parameters, publishingEnabled);
174 asWrapper<CreateSubscriptionRequest>(request),
175 std::move(statusChangeCallback),
176 std::move(deleteCallback),
177 std::forward<CompletionToken>(token)
203 const auto request = detail::createModifySubscriptionRequest(subscriptionId, parameters);
207#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
213template <
typename CompletionToken>
217 return detail::AsyncServiceAdapter<ModifySubscriptionResponse>::initiate(
221 opcua::detail::getHandle(connection),
asNative(request), callback, userdata,
nullptr
224 std::forward<CompletionToken>(token)
229template <
typename CompletionToken>
234 CompletionToken&& token
236 const auto request = detail::createModifySubscriptionRequest(subscriptionId, parameters);
239 asWrapper<ModifySubscriptionRequest>(request),
240 std::forward<CompletionToken>(token)
269template <
typename CompletionToken>
273 return detail::sendRequestAsync<SetPublishingModeRequest, SetPublishingModeResponse>(
274 connection, request, std::forward<CompletionToken>(token)
287 const auto request = detail::createSetPublishingModeRequest(publishing, {&subscriptionId, 1});
288 return detail::getSingleStatus(
298template <
typename CompletionToken>
300 Client& connection,
IntegerId subscriptionId,
bool publishing, CompletionToken&& token
302 const auto request = detail::createSetPublishingModeRequest(publishing, {&subscriptionId, 1});
305 asWrapper<SetPublishingModeRequest>(request),
306 detail::TransformToken(
307 detail::getSingleStatus<UA_SetPublishingModeResponse>,
308 std::forward<CompletionToken>(token)
330#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
336template <
typename CompletionToken>
340 return detail::AsyncServiceAdapter<DeleteSubscriptionsResponse>::initiate(
344 opcua::detail::getHandle(connection),
asNative(request), callback, userdata,
nullptr
347 std::forward<CompletionToken>(token)
358 const auto request = detail::createDeleteSubscriptionsRequest(subscriptionId);
359 return detail::getSingleStatus(
364#if UAPP_HAS_ASYNC_SUBSCRIPTIONS
370template <
typename CompletionToken>
374 const auto request = detail::createDeleteSubscriptionsRequest(subscriptionId);
377 asWrapper<DeleteSubscriptionsRequest>(request),
378 detail::TransformToken{
379 detail::getSingleStatus<UA_DeleteSubscriptionsResponse>,
380 std::forward<CompletionToken>(token)
UA_StatusCode wrapper class.
UA_CreateSubscriptionRequest wrapper class.
UA_CreateSubscriptionResponse wrapper class.
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_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)
std::function< void(IntegerId subId)> DeleteSubscriptionCallback
Subscription deletion callback.
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.
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 NativeType * asNative(WrapperType *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.