public void CreateMonitoredItems(
OperationContext context,
uint subscriptionId,
TimestampsToReturn timestampsToReturn,
MonitoredItemCreateRequestCollection itemsToCreate,
out MonitoredItemCreateResultCollection results,
out DiagnosticInfoCollection diagnosticInfos)
{
int monitoredItemCountIncrement = 0;
// find subscription.
Subscription subscription = null;
lock (m_lock)
{
if (!m_subscriptions.TryGetValue(subscriptionId, out subscription))
{
throw new ServiceResultException(StatusCodes.BadSubscriptionIdInvalid);
}
}
int currentMonitoredItemCount = subscription.MonitoredItemCount;
// create the items.
subscription.CreateMonitoredItems(
context,
timestampsToReturn,
itemsToCreate,
out results,
out diagnosticInfos);
monitoredItemCountIncrement = subscription.MonitoredItemCount - currentMonitoredItemCount;
// update diagnostics.
if (context.Session != null)
{
lock (context.Session.DiagnosticsLock)
{
SessionDiagnosticsDataType diagnostics = context.Session.SessionDiagnostics;
UpdateCurrentMonitoredItemsCount(diagnostics, monitoredItemCountIncrement);
}
}
}