Opc.Ua.Server.MonitoredItem.InitializeQueue C# (CSharp) Method

InitializeQueue() protected method

Clears and re-initializes the queue if the monitoring parameters changed.
protected InitializeQueue ( ) : void
return void
        protected void InitializeQueue()
        {
			switch (m_monitoringMode)
			{
				default:
				case MonitoringMode.Disabled:
				{
                    m_queue = null;
                    m_events = null;
					break;
				}

                case MonitoringMode.Reporting:
                case MonitoringMode.Sampling:
                    {
                        // check if queuing is disabled.
                        if (m_queueSize == 0)
                        {
                            if (m_typeMask == MonitoredItemTypeMask.DataChange)
                            {
                                m_queueSize = 1;
                            }

                            if ((m_typeMask & MonitoredItemTypeMask.Events) != 0)
                            {
                                m_queueSize = 1000; //TODO define the default value for quesize - posibly have a configuration for it
                            }
                        }

                        // create data queue.
                        if (m_typeMask == MonitoredItemTypeMask.DataChange)
                        {
                            if (m_queueSize <= 1)
                            {
                                m_queue = null;
                                break; // queueing is disabled
                            }

                            bool queueLastValue = false;

                            if (m_queue == null)
                            {
                                m_queue = new MonitoredItemQueue(m_id);
                                queueLastValue = true;
                            }

                            m_queue.SetQueueSize(m_queueSize, m_discardOldest, m_diagnosticsMasks);
                            m_queue.SetSamplingInterval(m_samplingInterval);

                            if (queueLastValue && m_lastValue != null)
                            {
                                m_queue.QueueValue(m_lastValue, m_lastError);
                            }
                        }
                        else // create event queue.
                        {
                            if (m_events == null)
                            {
                                m_events = new List<EventFieldList>();
                            }

                            // check if existing queue entries must be discarded;
                            if (m_events.Count > m_queueSize)
                            {
                                int queueSize = (int)m_queueSize;

                                if (m_discardOldest)
                                {
                                    m_events.RemoveRange(0, m_events.Count - queueSize);
                                }
                                else
                                {
                                    m_events.RemoveRange(queueSize, m_events.Count - queueSize);
                                }
                            }
                        }
                    
					break;
				}
			}
		}
		#endregion