Opc.Ua.Server.SubscriptionManager.ModifySubscription C# (CSharp) Method

ModifySubscription() public method

Modifies an existing subscription.
public ModifySubscription ( OperationContext context, uint subscriptionId, double requestedPublishingInterval, uint requestedLifetimeCount, uint requestedMaxKeepAliveCount, uint maxNotificationsPerPublish, byte priority, double &revisedPublishingInterval, uint &revisedLifetimeCount, uint &revisedMaxKeepAliveCount ) : void
context OperationContext
subscriptionId uint
requestedPublishingInterval double
requestedLifetimeCount uint
requestedMaxKeepAliveCount uint
maxNotificationsPerPublish uint
priority byte
revisedPublishingInterval double
revisedLifetimeCount uint
revisedMaxKeepAliveCount uint
return void
		public void ModifySubscription(
            OperationContext context,
            uint             subscriptionId,
            double           requestedPublishingInterval,
            uint             requestedLifetimeCount,
            uint             requestedMaxKeepAliveCount,
            uint             maxNotificationsPerPublish,
            byte             priority,
            out double       revisedPublishingInterval,
            out uint         revisedLifetimeCount,
            out uint         revisedMaxKeepAliveCount)
        {
            revisedPublishingInterval = requestedPublishingInterval;
            revisedLifetimeCount      = requestedLifetimeCount;
            revisedMaxKeepAliveCount  = requestedMaxKeepAliveCount;
            
            uint publishingIntervalCount = 0;

            // find subscription.
            Subscription subscription = null;

            lock (m_lock)
            {
                if (!m_subscriptions.TryGetValue(subscriptionId, out subscription))
                {
                    throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid);
                }
            }

            double publishingInterval = subscription.PublishingInterval;

            // calculate publishing interval.
            revisedPublishingInterval = CalculatePublishingInterval(requestedPublishingInterval);

            // calculate the keep alive count.
            revisedMaxKeepAliveCount = CalculateKeepAliveCount(revisedPublishingInterval, requestedMaxKeepAliveCount);
            
            // calculate the lifetime count.
            revisedLifetimeCount = CalculateLifetimeCount(revisedPublishingInterval, revisedMaxKeepAliveCount, requestedLifetimeCount);

            // calculate the max notification count.
            maxNotificationsPerPublish = CalculateMaxNotificationsPerPublish(maxNotificationsPerPublish);

            // update the subscription.
            subscription.Modify(
                context,
                revisedPublishingInterval,
                revisedLifetimeCount,
                revisedMaxKeepAliveCount,
                maxNotificationsPerPublish,
                priority);

            // get the count for the diagnostics.
            publishingIntervalCount = GetPublishingIntervalCount();

            lock (m_server.DiagnosticsLock)
            {
                ServerDiagnosticsSummaryDataType diagnostics = m_server.ServerDiagnostics;
                diagnostics.PublishingIntervalCount = publishingIntervalCount;
            }
        }