private void DoSample(object state)
{
try
{
List<ISampledDataChangeMonitoredItem> items = state as List<ISampledDataChangeMonitoredItem>;
// read values for all enabled items.
if (items != null && items.Count > 0)
{
ReadValueIdCollection itemsToRead = new ReadValueIdCollection(items.Count);
DataValueCollection values = new DataValueCollection(items.Count);
List<ServiceResult> errors = new List<ServiceResult>(items.Count);
// allocate space for results.
for (int ii = 0; ii < items.Count; ii++)
{
ReadValueId readValueId = items[ii].GetReadValueId();
readValueId.Processed = false;
itemsToRead.Add(readValueId);
values.Add(null);
errors.Add(null);
}
OperationContext context = new OperationContext(m_session, m_diagnosticsMask);
// read values.
m_nodeManager.Read(
context,
0,
itemsToRead,
values,
errors);
// update monitored items.
for (int ii = 0; ii < items.Count; ii++)
{
if (values[ii] == null)
{
values[ii] = new DataValue(StatusCodes.BadInternalError, DateTime.UtcNow);
}
items[ii].QueueValue(values[ii], errors[ii]);
}
}
}
catch (Exception e)
{
Utils.Trace(e, "Server: Unexpected error sampling values.");
}
}
#endregion