public Subscription(
IServerInternal server,
Session session,
uint subscriptionId,
double publishingInterval,
uint maxLifetimeCount,
uint maxKeepAliveCount,
uint maxNotificationsPerPublish,
byte priority,
bool publishingEnabled,
uint maxMessageCount)
{
if (server == null) throw new ArgumentNullException("server");
if (session == null) throw new ArgumentNullException("session");
m_server = server;
m_session = session;
m_id = subscriptionId;
m_publishingInterval = publishingInterval;
m_maxLifetimeCount = maxLifetimeCount;
m_maxKeepAliveCount = maxKeepAliveCount;
m_maxNotificationsPerPublish = maxNotificationsPerPublish;
m_publishingEnabled = publishingEnabled;
m_priority = priority;
m_publishTimerExpiry = HiResClock.UtcNow.Ticks/TimeSpan.TicksPerMillisecond + (long)publishingInterval;
m_keepAliveCounter = maxKeepAliveCount;
m_lifetimeCounter = 0;
m_waitingForPublish = false;
m_maxMessageCount = maxMessageCount;
m_sentMessages = new List<NotificationMessage>();
m_monitoredItems = new Dictionary<uint,LinkedListNode<IMonitoredItem>>();
m_itemsToCheck = new LinkedList<IMonitoredItem>();
m_itemsToPublish = new LinkedList<IMonitoredItem>();
m_itemsToTrigger = new Dictionary<uint,List<ITriggeredMonitoredItem>>();
// m_itemsReadyToPublish = new Queue<IMonitoredItem>();
// m_itemsNotificationsAvailable = new LinkedList<IMonitoredItem>();
m_sequenceNumber = 1;
// initialize diagnostics.
m_diagnostics = new SubscriptionDiagnosticsDataType();
m_diagnostics.SessionId = m_session.Id;
m_diagnostics.SubscriptionId = m_id;
m_diagnostics.Priority = priority;
m_diagnostics.PublishingInterval = publishingInterval;
m_diagnostics.MaxKeepAliveCount = maxKeepAliveCount;
m_diagnostics.MaxLifetimeCount = maxLifetimeCount;
m_diagnostics.MaxNotificationsPerPublish = maxNotificationsPerPublish;
m_diagnostics.PublishingEnabled = publishingEnabled;
m_diagnostics.ModifyCount = 0;
m_diagnostics.EnableCount = 0;
m_diagnostics.DisableCount = 0;
m_diagnostics.RepublishMessageRequestCount = 0;
m_diagnostics.RepublishMessageCount = 0;
m_diagnostics.TransferRequestCount = 0;
m_diagnostics.TransferredToSameClientCount = 0;
m_diagnostics.TransferredToAltClientCount = 0;
m_diagnostics.PublishRequestCount = 0;
m_diagnostics.DataChangeNotificationsCount = 0;
m_diagnostics.EventNotificationsCount = 0;
m_diagnostics.NotificationsCount = 0;
m_diagnostics.LatePublishRequestCount = 0;
m_diagnostics.CurrentKeepAliveCount = 0;
m_diagnostics.CurrentLifetimeCount = 0;
m_diagnostics.UnacknowledgedMessageCount = 0;
m_diagnostics.DiscardedMessageCount = 0;
m_diagnostics.MonitoredItemCount = 0;
m_diagnostics.DisabledMonitoredItemCount = 0;
m_diagnostics.MonitoringQueueOverflowCount = 0;
m_diagnostics.NextSequenceNumber = (uint)m_sequenceNumber;
ServerSystemContext systemContext = m_server.DefaultSystemContext.Copy(session);
m_diagnosticsId = server.DiagnosticsNodeManager.CreateSubscriptionDiagnostics(
systemContext,
m_diagnostics,
OnUpdateDiagnostics);
// TraceState("CREATED");
}
#endregion