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

WaitForUpdates() private method

Waits for updates.
private WaitForUpdates ( Subscription subscription, List monitoredItems, bool afterDisable ) : bool
subscription Subscription
monitoredItems List
afterDisable bool
return bool
        private bool WaitForUpdates(Subscription subscription, List<MonitoredItem> monitoredItems, bool afterDisable)
        {
            bool success = true;

            DateTime deadline = DateTime.UtcNow.AddMilliseconds((double)(subscription.PublishingInterval*3 + m_maximumTimingError));
            
            do
            {
                int count = 0; 

                lock (subscription)
                {
                    for (int ii = 0; ii < subscription.NotificationMessages.Count; ii++)
                    {
                        for (int jj = 0; jj < subscription.NotificationMessages[ii].NotificationData.Count; jj++)
                        {
                            ExtensionObject extension = subscription.NotificationMessages[ii].NotificationData[jj];
                            DataChangeNotification notification = extension.Body as DataChangeNotification;
                                            
                            if (notification != null)
                            {
                                count += notification.MonitoredItems.Count;
                            }
                        }
                    }
                }

                if (count == monitoredItems.Count)
                {
                    break;
                }

                if (m_errorEvent.WaitOne(100, false))
                {
                    success = false;
                    break;
                }

                if (subscription.Failed)
                {
                    success = false;
                    break;
                }
            }
            while(deadline > DateTime.UtcNow);

            if (success)
            {
                lock (subscription)
                {
                    if (!VerifyInitialDataChange(subscription, monitoredItems, afterDisable))
                    {
                        success = false;
                    }
                }
            }

            return success;
        }