public SetQueueSize ( uint queueSize, bool discardOldest, DiagnosticsMasks diagnosticsMasks ) : void | ||
queueSize | uint | The new queue size. |
discardOldest | bool | Whether to discard the oldest values if the queue overflows. |
diagnosticsMasks | DiagnosticsMasks | Specifies which diagnostics which should be kept in the queue. |
return | void |
public void SetQueueSize(uint queueSize, bool discardOldest, DiagnosticsMasks diagnosticsMasks)
{
int length = (int)queueSize;
if (length < 1)
{
length = 1;
}
int start = m_start;
int end = m_end;
// create new queue.
DataValue[] values = new DataValue[length];
ServiceResult[] errors = null;
if ((diagnosticsMasks & DiagnosticsMasks.OperationAll) != 0)
{
errors = new ServiceResult[length];
}
// copy existing values.
List<DataValue> existingValues = null;
List<ServiceResult> existingErrors = null;
if (m_start >= 0)
{
existingValues = new List<DataValue>();
existingErrors = new List<ServiceResult>();
DataValue value = null;
ServiceResult error = null;
while (Dequeue(out value, out error))
{
existingValues.Add(value);
existingErrors.Add(error);
}
}
// update internals.
m_values = values;
m_errors = errors;
m_start = -1;
m_end = 0;
m_overflow = -1;
m_discardOldest = discardOldest;
// requeue the data.
if (existingValues != null)
{
for (int ii = 0; ii < existingValues.Count; ii++)
{
Enqueue(existingValues[ii], existingErrors[ii]);
}
}
}
/// <summary> /// Constructs a new instance. /// </summary> public DataChangeMonitoredItem( MonitoredNode source, uint id, uint attributeId, NumericRange indexRange, QualifiedName dataEncoding, DiagnosticsMasks diagnosticsMasks, TimestampsToReturn timestampsToReturn, MonitoringMode monitoringMode, uint clientHandle, double samplingInterval, uint queueSize, bool discardOldest, DataChangeFilter filter, Range range, bool alwaysReportUpdates) { m_source = source; m_id = id; m_attributeId = attributeId; m_indexRange = indexRange; m_dataEncoding = dataEncoding; m_timestampsToReturn = timestampsToReturn; m_diagnosticsMasks = diagnosticsMasks; m_monitoringMode = monitoringMode; m_clientHandle = clientHandle; m_samplingInterval = samplingInterval; m_nextSampleTime = DateTime.UtcNow.Ticks; m_readyToPublish = false; m_readyToTrigger = false; m_resendData = false; m_queue = null; m_filter = filter; m_range = 0; m_alwaysReportUpdates = alwaysReportUpdates; if (range != null) { m_range = range.High - range.Low; } if (queueSize > 1) { m_queue = new MonitoredItemQueue(id); m_queue.SetQueueSize(queueSize, discardOldest, diagnosticsMasks); m_queue.SetSamplingInterval(samplingInterval); } }