private void CreateSubscription()
{
if (m_subscription != null)
{
m_subscription.Dispose();
m_subscription = null;
}
// get the current session.
Session session = m_server.Session;
if (session == null)
{
return;
}
// create the subscription.
m_subscription = new Subscription();
m_subscription.PublishingEnabled = Active;
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.FastEventCallback = OnEventNotification;
m_subscription.DisableMonitoredItemCache = true;
session.AddSubscription(m_subscription);
m_subscription.Create();
// update the monitored items.
EventFilter filter = m_filter.GetFilter();
MonitoringMode monitoringMode = (Active)?MonitoringMode.Reporting:MonitoringMode.Disabled;
foreach (MonitoredItem monitoredItem in m_notifiers.Values)
{
monitoredItem.Filter = filter;
monitoredItem.MonitoringMode = monitoringMode;
m_subscription.AddItem(monitoredItem);
}
m_subscription.ApplyChanges();
}