private bool ToogleDisabledState(Subscription subscription, List<MonitoredItem> monitoredItems)
{
UInt32Collection monitoredItemIds = new UInt32Collection();
lock (subscription)
{
subscription.NotificationMessages.Clear();
subscription.ReceiveTimes.Clear();
for (int ii = 0; ii < monitoredItems.Count; ii++)
{
monitoredItemIds.Add(monitoredItems[ii].MonitoredItemId);
monitoredItems[ii].Value = null;
}
}
StatusCodeCollection results = null;
DiagnosticInfoCollection diagnosticInfos = null;
Session.SetMonitoringMode(
null,
subscription.SubscriptionId,
MonitoringMode.Disabled,
monitoredItemIds,
out results,
out diagnosticInfos);
ClientBase.ValidateResponse(results, monitoredItemIds);
ClientBase.ValidateDiagnosticInfos(diagnosticInfos, monitoredItemIds);
lock (subscription)
{
for (int ii = 0; ii < results.Count; ii++)
{
if (StatusCode.IsBad(results[ii]))
{
Log(
"Error disabling MonitoredItem. ClientHandle = {0}, Node = {1}, Attribute = {2}, StatusCode = {3}",
monitoredItems[ii].MonitoredItemId,
monitoredItems[ii].Node,
Attributes.GetBrowseName(monitoredItems[ii].AttributeId),
results[ii]);
return false;
}
}
}
ResponseHeader responseHeader = Session.SetMonitoringMode(
null,
subscription.SubscriptionId,
MonitoringMode.Reporting,
monitoredItemIds,
out results,
out diagnosticInfos);
ClientBase.ValidateResponse(results, monitoredItemIds);
ClientBase.ValidateDiagnosticInfos(diagnosticInfos, monitoredItemIds);
lock (subscription)
{
for (int ii = 0; ii < results.Count; ii++)
{
if (StatusCode.IsBad(results[ii]))
{
Log(
"Error enabling MonitoredItem. ClientHandle = {0}, Node = {1}, Attribute = {2}, StatusCode = {3}",
monitoredItems[ii].MonitoredItemId,
monitoredItems[ii].Node,
Attributes.GetBrowseName(monitoredItems[ii].AttributeId),
results[ii]);
return false;
}
monitoredItems[ii].UpdateTime = responseHeader.Timestamp;
}
}
return true;
}