Opc.Ua.Server.SessionPublishQueue.CompletePublish C# (CSharp) Method

CompletePublish() public method

Completes the publish.
public CompletePublish ( bool requeue, AsyncPublishOperation operation, object calldata ) : Subscription
requeue bool if set to true the request must be requeued.
operation AsyncPublishOperation The asynchronous operation.
calldata object The calldata.
return Subscription
        public Subscription CompletePublish(
            bool requeue, 
            AsyncPublishOperation operation,
            object calldata)
        {
            // Utils.Trace("PUBLISH: #{0} Completing", operation.RequestHandle, requeue);

            QueuedRequest request = (QueuedRequest)calldata;

            // check if need to requeue.
            lock (m_lock)
            {
                if (requeue)
                {
                    request.Subscription = null;
                    request.Error = StatusCodes.Good;
                    m_queuedRequests.AddFirst(request);
                    return null;
                }
            }

            // must reassign subscription on error.
            if (ServiceResult.IsBad(request.Error))
            {
                // Utils.Trace("PUBLISH: #{0} Reassigned ERROR({1})", operation.RequestHandle, request.Error);

                if (request.Subscription != null)
                {
                    lock (m_lock)
                    {
                        request.Subscription.Publishing = false;
                        AssignSubscriptionToRequest(request.Subscription);
                    }
                }

                // TraceState("REQUEST #{0} PUBLISH ERROR ({1})", clientHandle, error.StatusCode);
                throw new ServiceResultException(request.Error);
            }

            // must be shuting down if this is null but no error.
            if (request.Subscription == null)
            {
                throw new ServiceResultException(StatusCodes.BadNoSubscription);
            }

            // return whatever was assigned.
            return request.Subscription.Subscription;
        }