/// <summary>
/// Starts monitoring the item.
/// </summary>
/// <remarks>
/// It will use the external source for monitoring if the source accepts the item.
/// The changes will not take affect until the ApplyChanges() method is called.
/// </remarks>
public virtual void StartMonitoring(OperationContext context, ISampledDataChangeMonitoredItem monitoredItem)
{
lock (m_lock)
{
// do nothing for disabled or exception based items.
if (monitoredItem.MonitoringMode == MonitoringMode.Disabled || monitoredItem.MinimumSamplingInterval == 0)
{
m_sampledItems.Add(monitoredItem, null);
return;
}
// find a suitable sampling group.
foreach (SamplingGroup samplingGroup in m_samplingGroups)
{
if (samplingGroup.StartMonitoring(context, monitoredItem))
{
m_sampledItems.Add(monitoredItem, samplingGroup);
return;
}
}
// create a new sampling group.
SamplingGroup samplingGroup2 = new SamplingGroup(
m_server,
m_nodeManager,
m_samplingRates,
context,
monitoredItem.SamplingInterval);
samplingGroup2.StartMonitoring(context, monitoredItem);
m_samplingGroups.Add(samplingGroup2);
m_sampledItems.Add(monitoredItem, samplingGroup2);
}
}