/// <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); } }
/// <summary> /// Changes monitoring attributes the item. /// </summary> /// <remarks> /// It will call the external source to change the monitoring if an external source was provided originally. /// The changes will not take affect until the ApplyChanges() method is called. /// </remarks> public virtual void ModifyMonitoring(OperationContext context, ISampledDataChangeMonitoredItem monitoredItem) { lock (m_lock) { // find existing sampling group. SamplingGroup samplingGroup = null; if (m_sampledItems.TryGetValue(monitoredItem, out samplingGroup)) { if (samplingGroup != null) { if (samplingGroup.ModifyMonitoring(context, monitoredItem)) { return; } } m_sampledItems.Remove(monitoredItem); } // assign to a new sampling group. StartMonitoring(context, monitoredItem); return; } }
/// <summary> /// Stops monitoring the item. /// </summary> /// <remarks> /// It will call the external source to stop the monitoring if an external source was provided originally. /// The changes will not take affect until the ApplyChanges() method is called. /// </remarks> public virtual void StopMonitoring(ISampledDataChangeMonitoredItem monitoredItem) { lock (m_lock) { // check for sampling group. SamplingGroup samplingGroup = null; if (m_sampledItems.TryGetValue(monitoredItem, out samplingGroup)) { if (samplingGroup != null) { samplingGroup.StopMonitoring(monitoredItem); } m_sampledItems.Remove(monitoredItem); return; } } }