private void ModifySubscription()
{
// turn off publishing first.
if (!Active && m_subscription.CurrentPublishingEnabled)
{
m_subscription.SetPublishingMode(false);
}
m_subscription.PublishingInterval = (int)Math.Max(BufferTime, 1000);
m_subscription.KeepAliveCount = (uint)Math.Max(Math.Ceiling(((double)KeepAlive)/m_subscription.PublishingInterval), 10);
m_subscription.LifetimeCount = m_subscription.KeepAliveCount * 3;
m_subscription.MaxNotificationsPerPublish = MaxSize;
m_subscription.TimestampsToReturn = TimestampsToReturn.Neither;
m_subscription.Priority = 0;
m_subscription.Modify();
// update the monitored items.
EventFilter filter = m_filter.GetFilter();
MonitoringMode monitoringMode = (Active)?MonitoringMode.Reporting:MonitoringMode.Disabled;
List<MonitoredItem> itemsToUpdate = new List<MonitoredItem>();
foreach (MonitoredItem monitoredItem in m_notifiers.Values)
{
monitoredItem.Filter = filter;
if (!monitoredItem.Created)
{
monitoredItem.MonitoringMode = monitoringMode;
m_subscription.AddItem(monitoredItem);
}
else
{
if (monitoredItem.MonitoringMode != monitoringMode)
{
itemsToUpdate.Add(monitoredItem);
}
}
}
m_subscription.ApplyChanges();
m_subscription.SetMonitoringMode(monitoringMode, itemsToUpdate);
// turn on publishing last.
if (Active && !m_subscription.CurrentPublishingEnabled)
{
m_subscription.SetPublishingMode(true);
}
}