Opc.Ua.Com.Server.ComAe2Subscription.DoProcessQueue C# (CSharp) Method

DoProcessQueue() private method

Called send events to client.
private DoProcessQueue ( object state ) : void
state object
return void
        private void DoProcessQueue(object state)
        {
            Queue<AeEvent> events = new Queue<AeEvent>();

            try
            {
                // check if disposed.
                if (m_disposed)
                {
                    return;
                }

                // process the queue.
                lock (m_queue)
                {
                    while (m_queue.Count > 0)
                    {
                        events.Enqueue(m_queue.Dequeue());
                    }
                }
                
                // check if time for a keep alive.
                lock (m_lock)
                {
                    // check if time for keep alive.
                    if (events.Count == 0)
                    {
                        if (KeepAlive == 0 || m_lastUpdateTime.AddMilliseconds(KeepAlive*m_keepAliveCount) > DateTime.UtcNow)
                        {
                            return;
                        }
                    }

                    // no keep alives if not active.
                    if (!Active)
                    {
                        return;
                    }

                    // update counters.
                    if (events.Count > 0)
                    {
                        m_lastUpdateTime = DateTime.UtcNow;
                        m_keepAliveCount = 1;
                    }
                    else
                    {
                        m_keepAliveCount++;
                    }
                }

                // send a keep alive callback.
                if (events.Count == 0)
                {
                    IComAeEventCallback callback = m_callback;

                    if (callback != null)
                    {
                        callback.OnEvent(
                            ClientHandle,
                            false,
                            false,
                            null);
                    }

                    return;
                }

                // send the events to client.
                SendInBlocks(m_callback, events, MaxSize, false);
            }
            catch (Exception exception)
            {
                Utils.Trace(exception, "Error processing event callback.");
            }
        }