Opc.Ua.ServerTest.SubscribeTest.CreateSubscription C# (CSharp) Method

CreateSubscription() private method

Creates a subscription.
private CreateSubscription ( double publishingInterval, uint lifetimeCount, uint keepAliveCount, uint maxNotificationsPerPublish, bool publishingEnabled, byte priority ) : bool
publishingInterval double
lifetimeCount uint
keepAliveCount uint
maxNotificationsPerPublish uint
publishingEnabled bool
priority byte
return bool
        private bool CreateSubscription(
            double publishingInterval,
            uint lifetimeCount,
            uint keepAliveCount,
            uint maxNotificationsPerPublish,
            bool publishingEnabled,
            byte priority)
        {            
            try
            {
                uint subscriptionId;
                double revisedPublishingInterval;
                uint revisedLifetimeCount;
                uint revisedKeepAliveCount;
                
                Subscription subscription = new Subscription();

                subscription.MaxNotificationsPerPublish = maxNotificationsPerPublish;
                subscription.PublishingEnabled = publishingEnabled;
                subscription.Priority = priority;
                subscription.NextExpectedSequenceNumber = 1;
                subscription.StaticData = true;
                
                lock (m_subscriptions)
                {
                    m_subscriptions.Add(subscription);
                }

                DateTime start = DateTime.UtcNow;

                ResponseHeader responseHeader = Session.CreateSubscription(
                    null,
                    publishingInterval,
                    lifetimeCount,
                    keepAliveCount,
                    maxNotificationsPerPublish,
                    publishingEnabled,
                    priority,
                    out subscriptionId,
                    out revisedPublishingInterval,
                    out revisedLifetimeCount,
                    out revisedKeepAliveCount);

                double elapsedTime = (DateTime.UtcNow - start).TotalMilliseconds;

                if (elapsedTime > 300)
                {
                    Log("WARNING: CreateSubscription took {0}ms. Timing errors may occur.", (DateTime.UtcNow - start).TotalMilliseconds);
                }
                
                subscription.SubscriptionId = subscriptionId;
                subscription.PublishingInterval = revisedPublishingInterval;
                subscription.LifetimeCount = revisedLifetimeCount;
                subscription.KeepAliveCount = revisedKeepAliveCount;

                while (m_outstandingPublishRequests < m_publishPipelineDepth)
                {
                    BeginPublish();
                }
                                
                lock (subscription)
                {
                    PublishingState state = new PublishingState();

                    state.KeepAliveCount = subscription.KeepAliveCount;
                    state.PublishingInterval = subscription.PublishingInterval;
                    state.Start = responseHeader.Timestamp;
                    state.KeepAliveMode = true;

                    subscription.States.Add(state);
                }

                return true;
            }
            catch (Exception e)
            {
                Log(e, "Error creating subscription.", null);
                return false;
            }
        }