private void DeleteMonitoredItemsForEvents(
OperationContext context,
uint subscriptionId,
IList<IMonitoredItem> monitoredItems,
IList<bool> processedItems,
IList<ServiceResult> errors)
{
for (int ii = 0; ii < monitoredItems.Count; ii++)
{
IEventMonitoredItem monitoredItem = monitoredItems[ii] as IEventMonitoredItem;
// all event subscriptions are handled by the event manager.
if (monitoredItem == null || (monitoredItem.MonitoredItemType & MonitoredItemTypeMask.Events) == 0)
{
continue;
}
processedItems[ii] = true;
// unsubscribe to all node managers.
if ((monitoredItem.MonitoredItemType & MonitoredItemTypeMask.AllEvents) != 0)
{
foreach (INodeManager manager in m_nodeManagers)
{
manager.SubscribeToAllEvents(context, subscriptionId, monitoredItem, true);
}
}
// only unsubscribe to the node manager that owns the node.
else
{
monitoredItem.NodeManager.SubscribeToEvents(context, monitoredItem.ManagerHandle, subscriptionId, monitoredItem, true);
}
// delete the item.
m_server.EventManager.DeleteMonitoredItem(monitoredItem.Id);
// success.
errors[ii] = StatusCodes.Good;
}
}