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