public virtual void ModifyMonitoredItems(
OperationContext context,
TimestampsToReturn timestampsToReturn,
IList<IMonitoredItem> monitoredItems,
IList<MonitoredItemModifyRequest> itemsToModify,
IList<ServiceResult> errors,
IList<MonitoringFilterResult> filterResults)
{
if (context == null) throw new ArgumentNullException("context");
if (itemsToModify == null) throw new ArgumentNullException("itemsToModify");
if (monitoredItems == null) throw new ArgumentNullException("monitoredItems");
if (errors == null) throw new ArgumentNullException("errors");
if (filterResults == null) throw new ArgumentNullException("filterResults");
if (timestampsToReturn < TimestampsToReturn.Source || timestampsToReturn > TimestampsToReturn.Neither)
{
throw new ServiceResultException(StatusCodes.BadTimestampsToReturnInvalid);
}
bool validItems = false;
for (int ii = 0; ii < itemsToModify.Count; ii++)
{
// check for errors.
if (ServiceResult.IsBad(errors[ii]) || monitoredItems[ii] == null)
{
itemsToModify[ii].Processed = true;
continue;
}
// validate request paramaters.
errors[ii] = ValidateMonitoredItemModifyRequest(itemsToModify[ii]);
if (ServiceResult.IsBad(errors[ii]))
{
itemsToModify[ii].Processed = true;
continue;
}
// found at least one valid item.
validItems = true;
itemsToModify[ii].Processed = false;
}
// call each node manager.
if (validItems)
{
// modify items for event filters.
ModifyMonitoredItemsForEvents(
context,
timestampsToReturn,
monitoredItems,
itemsToModify,
errors,
filterResults);
// let each node manager figure out which items it owns.
foreach (INodeManager nodeManager in m_nodeManagers)
{
nodeManager.ModifyMonitoredItems(
context,
timestampsToReturn,
monitoredItems,
itemsToModify,
errors,
filterResults);
}
// update results.
for (int ii = 0; ii < errors.Count; ii++)
{
if (!itemsToModify[ii].Processed)
{
errors[ii] = new ServiceResult(StatusCodes.BadMonitoredItemIdInvalid);
}
}
}
}