diff --git a/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs b/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs index 1db2efc1cb..bf854b2ed7 100644 --- a/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs +++ b/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs @@ -258,7 +258,7 @@ namespace Opc.Ua.Server uint[] serverHandles = null; uint[] clientHandles = null; - foreach (Subscription subscription in Server.SubscriptionManager.GetSubscriptions()) + foreach (ISubscription subscription in Server.SubscriptionManager.GetSubscriptions()) { if (subscription.Id == subscriptionId) { @@ -301,7 +301,7 @@ namespace Opc.Ua.Server return StatusCodes.BadInvalidArgument; } - foreach (Subscription subscription in Server.SubscriptionManager.GetSubscriptions()) + foreach (ISubscription subscription in Server.SubscriptionManager.GetSubscriptions()) { if (subscription.Id == subscriptionId) { diff --git a/Libraries/Opc.Ua.Server/Subscription/ISubscription.cs b/Libraries/Opc.Ua.Server/Subscription/ISubscription.cs new file mode 100644 index 0000000000..68917d4d9e --- /dev/null +++ b/Libraries/Opc.Ua.Server/Subscription/ISubscription.cs @@ -0,0 +1,278 @@ +/* ======================================================================== + * Copyright (c) 2005-2020 The OPC Foundation, Inc. All rights reserved. + * + * OPC Foundation MIT License 1.00 + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * The complete license agreement can be found here: + * http://opcfoundation.org/License/MIT/1.00/ + * ======================================================================*/ + +using System; + +namespace Opc.Ua.Server +{ + /// + /// An interface used by the monitored items to signal the subscription. + /// + public interface ISubscription : IDisposable + { + /// + /// The session that owns the monitored item. + /// + Session Session { get; } + + /// + /// The subscriptions owner identity. + /// + IUserIdentity EffectiveIdentity { get; } + + /// + /// The identifier for the item that is unique within the server. + /// + uint Id { get; } + /// + /// The identifier for the session that owns the subscription. + /// + NodeId SessionId { get; } + + /// + /// The number of monitored items. + /// + int MonitoredItemCount { get; } + + /// + /// The priority assigned to the subscription. + /// + byte Priority { get; } + + /// + /// The publishing rate for the subscription. + /// + double PublishingInterval { get; } + + /// + /// True if the subscription is set to durable and supports long lifetime and queue size + /// + bool IsDurable { get; } + + /// + /// Gets the lock that must be acquired before accessing the contents of the Diagnostics property. + /// + object DiagnosticsLock { get; } + + /// + /// Gets the lock that must be acquired before updating the contents of the Diagnostics property. + /// + object DiagnosticsWriteLock { get; } + + /// + /// Gets the current diagnostics for the subscription. + /// + public SubscriptionDiagnosticsDataType Diagnostics { get; } + + /// + /// Called when a monitored item is ready to publish. + /// + void ItemReadyToPublish(IMonitoredItem monitoredItem); + + /// + /// Called when a monitored item is ready to publish. + /// + void ItemNotificationsAvailable(IMonitoredItem monitoredItem); + + /// + /// Called when a value of monitored item is discarded in the monitoring queue. + /// + void QueueOverflowHandler(); + + /// + /// Checks if the subscription is ready to publish. + /// + PublishingState PublishTimerExpired(); + + /// + /// Returns the available sequence numbers for retransmission + /// For example used in Transfer Subscription + /// + public UInt32Collection AvailableSequenceNumbersForRetransmission(); + + /// + /// Refreshes the conditions. + /// + void ConditionRefresh2(uint monitoredItemId); + + + /// + /// Refreshes the conditions. + /// + void ConditionRefresh(); + + /// + /// Updates the publishing parameters for the subscription. + /// + void Modify( + OperationContext context, + double publishingInterval, + uint maxLifetimeCount, + uint maxKeepAliveCount, + uint maxNotificationsPerPublish, + byte priority); + + /// + /// Changes the monitoring mode for a set of items. + /// + void SetMonitoringMode( + OperationContext context, + MonitoringMode monitoringMode, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + + + /// + /// Enables/disables publishing for the subscription. + /// + void SetPublishingMode( + OperationContext context, + bool publishingEnabled); + + /// + /// Deletes the monitored items in a subscription. + /// + void DeleteMonitoredItems( + OperationContext context, + UInt32Collection monitoredItemIds, + out StatusCodeCollection results, + out DiagnosticInfoCollection diagnosticInfos); + + /// + /// Modifies monitored items in a subscription. + /// + void ModifyMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + MonitoredItemModifyRequestCollection itemsToModify, + out MonitoredItemModifyResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + + /// + /// Adds monitored items to a subscription. + /// + void CreateMonitoredItems( + OperationContext context, + TimestampsToReturn timestampsToReturn, + MonitoredItemCreateRequestCollection itemsToCreate, + out MonitoredItemCreateResultCollection results, + out DiagnosticInfoCollection diagnosticInfos); + + /// + /// Gets the monitored items for the subscription. + /// + void GetMonitoredItems(out uint[] serverHandles, out uint[] clientHandles); + + /// + /// Sets the subscription to durable mode. + /// + public ServiceResult SetSubscriptionDurable(uint maxLifetimeCount); + + /// + /// Initiates resending of all data monitored items in a Subscription + /// + void ResendData(OperationContext context); + + /// + /// Tells the subscription that the owning session is being closed. + /// + void SessionClosed(); + + /// + /// Removes a message from the message queue. + /// + ServiceResult Acknowledge(OperationContext context, uint sequenceNumber); + + /// + /// Deletes the subscription. + /// + void Delete(OperationContext context); + + /// + /// Verifies that a condition refresh operation is permitted. + /// + void ValidateConditionRefresh(OperationContext context); + + /// + /// Verifies that a condition refresh operation is permitted. + /// + void ValidateConditionRefresh2(OperationContext context, uint monitoredItemId); + + /// + /// Returns a cached notification message. + /// + NotificationMessage Republish( + OperationContext context, + uint retransmitSequenceNumber); + + /// + /// Publishes a timeout status message. + /// + NotificationMessage PublishTimeout(); + + /// + /// Publishes a SubscriptionTransferred status message. + /// + NotificationMessage SubscriptionTransferred(); + + /// + /// Returns all available notifications. + /// + NotificationMessage Publish( + OperationContext context, + out UInt32Collection availableSequenceNumbers, + out bool moreNotifications); + + /// + /// Transfers the subscription to a new session. + /// + /// The session to which the subscription is transferred. + /// Whether the first Publish response shall contain current values. + void TransferSession(OperationContext context, bool sendInitialValues); + + /// + /// Updates the triggers for the monitored item. + /// + public void SetTriggering( + OperationContext context, + uint triggeringItemId, + UInt32Collection linksToAdd, + UInt32Collection linksToRemove, + out StatusCodeCollection addResults, + out DiagnosticInfoCollection addDiagnosticInfos, + out StatusCodeCollection removeResults, + out DiagnosticInfoCollection removeDiagnosticInfos); + + /// + /// Return a StorableSubscription for restore after a server restart + /// + public IStoredSubscription ToStorableSubscription(); + } +} diff --git a/Libraries/Opc.Ua.Server/Subscription/SessionPublishQueue.cs b/Libraries/Opc.Ua.Server/Subscription/SessionPublishQueue.cs index 495090dcd2..3c6fcd6576 100644 --- a/Libraries/Opc.Ua.Server/Subscription/SessionPublishQueue.cs +++ b/Libraries/Opc.Ua.Server/Subscription/SessionPublishQueue.cs @@ -107,7 +107,7 @@ namespace Opc.Ua.Server /// Clears the queues because the session is closing. /// /// The list of subscriptions in the queue. - public IList Close() + public IList Close() { lock (m_lock) { @@ -125,7 +125,7 @@ namespace Opc.Ua.Server } // tell the subscriptions that the session is closed. - Subscription[] subscriptions = new Subscription[m_queuedSubscriptions.Count]; + ISubscription[] subscriptions = new ISubscription[m_queuedSubscriptions.Count]; for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++) { @@ -143,7 +143,7 @@ namespace Opc.Ua.Server /// /// Adds a subscription from the publish queue. /// - public void Add(Subscription subscription) + public void Add(ISubscription subscription) { if (subscription == null) throw new ArgumentNullException(nameof(subscription)); @@ -164,7 +164,7 @@ namespace Opc.Ua.Server /// /// Removes a subscription from the publish queue. /// - public void Remove(Subscription subscription, bool removeQueuedRequests) + public void Remove(ISubscription subscription, bool removeQueuedRequests) { if (subscription == null) throw new ArgumentNullException(nameof(subscription)); @@ -313,7 +313,7 @@ namespace Opc.Ua.Server /// /// Returns a subscription that is ready to publish. /// - public Subscription Publish(uint clientHandle, DateTime deadline, bool requeue, AsyncPublishOperation operation) + public ISubscription Publish(uint clientHandle, DateTime deadline, bool requeue, AsyncPublishOperation operation) { QueuedRequest request = null; @@ -521,7 +521,7 @@ namespace Opc.Ua.Server /// The asynchronous operation. /// The calldata. /// - public Subscription CompletePublish( + public ISubscription CompletePublish( bool requeue, AsyncPublishOperation operation, object calldata) @@ -573,7 +573,7 @@ namespace Opc.Ua.Server /// /// Adds a subscription back into the queue because it has more notifications to publish. /// - public void PublishCompleted(Subscription subscription, bool moreNotifications) + public void PublishCompleted(ISubscription subscription, bool moreNotifications) { lock (m_lock) { @@ -604,7 +604,7 @@ namespace Opc.Ua.Server /// public void PublishTimerExpired() { - List subscriptionsToDelete = new List(); + List subscriptionsToDelete = new List(); lock (m_lock) { @@ -845,7 +845,7 @@ namespace Opc.Ua.Server /// private class QueuedSubscription { - public Subscription Subscription; + public ISubscription Subscription; public DateTime Timestamp; public bool ReadyToPublish; public bool Publishing; diff --git a/Libraries/Opc.Ua.Server/Subscription/Subscription.cs b/Libraries/Opc.Ua.Server/Subscription/Subscription.cs index 39aa035a81..dbef00bf64 100644 --- a/Libraries/Opc.Ua.Server/Subscription/Subscription.cs +++ b/Libraries/Opc.Ua.Server/Subscription/Subscription.cs @@ -35,46 +35,10 @@ using System.Linq; namespace Opc.Ua.Server { - /// - /// An interface used by the monitored items to signal the subscription. - /// - public interface ISubscription - { - /// - /// The session that owns the monitored item. - /// - Session Session { get; } - - /// - /// The subscriptions owner identity. - /// - IUserIdentity EffectiveIdentity { get; } - - /// - /// The identifier for the item that is unique within the server. - /// - uint Id { get; } - - /// - /// Called when a monitored item is ready to publish. - /// - void ItemReadyToPublish(IMonitoredItem monitoredItem); - - /// - /// Called when a monitored item is ready to publish. - /// - void ItemNotificationsAvailable(IMonitoredItem monitoredItem); - - /// - /// Called when a value of monitored item is discarded in the monitoring queue. - /// - void QueueOverflowHandler(); - } - /// /// Manages a subscription created by a client. /// - public class Subscription : ISubscription, IDisposable + public class Subscription : ISubscription { #region Constructors /// diff --git a/Libraries/Opc.Ua.Server/Subscription/SubscriptionManager.cs b/Libraries/Opc.Ua.Server/Subscription/SubscriptionManager.cs index fb9dc5da83..5c620ac328 100644 --- a/Libraries/Opc.Ua.Server/Subscription/SubscriptionManager.cs +++ b/Libraries/Opc.Ua.Server/Subscription/SubscriptionManager.cs @@ -69,7 +69,7 @@ namespace Opc.Ua.Server m_subscriptionStore = server.SubscriptionStore; - m_subscriptions = new Dictionary(); + m_subscriptions = new Dictionary(); m_publishQueues = new NodeIdDictionary(); m_statusMessages = new NodeIdDictionary>(); m_lastSubscriptionId = BitConverter.ToInt64(Nonce.CreateRandomNonceData(sizeof(long)), 0); @@ -100,7 +100,7 @@ namespace Opc.Ua.Server { if (disposing) { - List subscriptions = null; + List subscriptions = null; List publishQueues = null; lock (m_lock) @@ -108,7 +108,7 @@ namespace Opc.Ua.Server publishQueues = new List(m_publishQueues.Values); m_publishQueues.Clear(); - subscriptions = new List(m_subscriptions.Values); + subscriptions = new List(m_subscriptions.Values); m_subscriptions.Clear(); } @@ -117,7 +117,7 @@ namespace Opc.Ua.Server Utils.SilentDispose(publishQueue); } - foreach (Subscription subscription in subscriptions) + foreach (ISubscription subscription in subscriptions) { Utils.SilentDispose(subscription); } @@ -178,9 +178,9 @@ namespace Opc.Ua.Server /// Returns all of the subscriptions known to the subscription manager. /// /// A list of the subscriptions. - public IList GetSubscriptions() + public IList GetSubscriptions() { - List subscriptions = new List(); + List subscriptions = new List(); lock (m_lock) { @@ -193,7 +193,7 @@ namespace Opc.Ua.Server /// /// Raises an event related to a subscription. /// - protected virtual void RaiseSubscriptionEvent(Subscription subscription, bool deleted) + protected virtual void RaiseSubscriptionEvent(ISubscription subscription, bool deleted) { SubscriptionEventHandler handler = null; @@ -271,7 +271,7 @@ namespace Opc.Ua.Server StoreSubscriptions(); // dispose of subscriptions objects. - foreach (Subscription subscription in m_subscriptions.Values) + foreach (ISubscription subscription in m_subscriptions.Values) { subscription.Dispose(); } @@ -293,7 +293,7 @@ namespace Opc.Ua.Server } var subscriptionsToStore = new List(); - foreach (Subscription subscription in m_subscriptions.Values) + foreach (ISubscription subscription in m_subscriptions.Values) { // only store durable subscriptions if (!subscription.IsDurable) @@ -360,7 +360,7 @@ namespace Opc.Ua.Server foreach (IStoredSubscription storedSubscription in restoreResult.Subscriptions) { - Subscription subscription; + ISubscription subscription; try { @@ -384,7 +384,7 @@ namespace Opc.Ua.Server /// /// Restore a subscription after a restart /// - protected virtual Subscription RestoreSubscription( + protected virtual ISubscription RestoreSubscription( IStoredSubscription storedSubscription) { if (m_subscriptions.Count >= m_maxSubscriptionCount) @@ -439,7 +439,7 @@ namespace Opc.Ua.Server { // close the publish queue for the session. SessionPublishQueue queue = null; - IList subscriptionsToDelete = null; + IList subscriptionsToDelete = null; uint publishingIntervalCount = 0; lock (m_lock) @@ -475,7 +475,7 @@ namespace Opc.Ua.Server { for (int ii = 0; ii < subscriptionsToDelete.Count; ii++) { - Subscription subscription = subscriptionsToDelete[ii]; + ISubscription subscription = subscriptionsToDelete[ii]; // delete the subscription. if (deleteSubscriptions) @@ -504,7 +504,7 @@ namespace Opc.Ua.Server { if (m_abandonedSubscriptions == null) { - m_abandonedSubscriptions = new List(); + m_abandonedSubscriptions = new List(); } m_abandonedSubscriptions.Add(subscription); @@ -520,7 +520,7 @@ namespace Opc.Ua.Server /// public void ConditionRefresh(OperationContext context, uint subscriptionId) { - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -564,7 +564,7 @@ namespace Opc.Ua.Server /// public void ConditionRefresh2(OperationContext context, uint subscriptionId, uint monitoredItemId) { - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -600,7 +600,7 @@ namespace Opc.Ua.Server /// /// Completes a refresh conditions request. /// - private void DoConditionRefresh(Subscription subscription) + private void DoConditionRefresh(ISubscription subscription) { try { @@ -616,7 +616,7 @@ namespace Opc.Ua.Server /// /// Completes a refresh conditions request. /// - private void DoConditionRefresh2(Subscription subscription, uint monitoredItemId) + private void DoConditionRefresh2(ISubscription subscription, uint monitoredItemId) { try { @@ -637,7 +637,7 @@ namespace Opc.Ua.Server { uint publishingIntervalCount = 0; int monitoredItemCount = 0; - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -744,7 +744,7 @@ namespace Opc.Ua.Server lock (m_lock) { - foreach (Subscription subscription in m_subscriptions.Values) + foreach (ISubscription subscription in m_subscriptions.Values) { double publishingInterval = subscription.PublishingInterval; @@ -792,7 +792,7 @@ namespace Opc.Ua.Server revisedMaxKeepAliveCount = 0; uint publishingIntervalCount = 0; - Subscription subscription = null; + ISubscription subscription = null; // get session from context. Session session = context.Session; @@ -996,7 +996,7 @@ namespace Opc.Ua.Server /// Called when a subscription expires. /// /// The subscription. - internal void SubscriptionExpired(Subscription subscription) + internal void SubscriptionExpired(ISubscription subscription) { lock (m_statusMessagesLock) { @@ -1048,7 +1048,7 @@ namespace Opc.Ua.Server do { // wait for a subscription to publish. - Subscription subscription = queue.CompletePublish(requeue, operation, operation.Calldata); + ISubscription subscription = queue.CompletePublish(requeue, operation, operation.Calldata); if (subscription == null) { @@ -1138,7 +1138,7 @@ namespace Opc.Ua.Server do { // wait for a subscription to publish. - Subscription subscription = queue.Publish( + ISubscription subscription = queue.Publish( context.ClientHandle, context.OperationDeadline, requeue, @@ -1224,7 +1224,7 @@ namespace Opc.Ua.Server uint publishingIntervalCount = 0; // find subscription. - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -1281,7 +1281,7 @@ namespace Opc.Ua.Server out uint revisedLifetimeInHours) { revisedLifetimeInHours = 0; - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { if (!m_subscriptions.TryGetValue(subscriptionId, out subscription)) @@ -1335,7 +1335,7 @@ namespace Opc.Ua.Server try { // find subscription. - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -1398,7 +1398,7 @@ namespace Opc.Ua.Server try { // find subscription. - Subscription subscription = null; + ISubscription subscription = null; Session ownerSession = null; lock (m_lock) @@ -1617,7 +1617,7 @@ namespace Opc.Ua.Server uint retransmitSequenceNumber) { // find subscription. - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -1646,7 +1646,7 @@ namespace Opc.Ua.Server out DiagnosticInfoCollection removeDiagnosticInfos) { // find subscription. - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -1682,7 +1682,7 @@ namespace Opc.Ua.Server int monitoredItemCountIncrement = 0; // find subscription. - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -1727,7 +1727,7 @@ namespace Opc.Ua.Server out DiagnosticInfoCollection diagnosticInfos) { // find subscription. - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -1759,7 +1759,7 @@ namespace Opc.Ua.Server int monitoredItemCountIncrement = 0; // find subscription. - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -1803,7 +1803,7 @@ namespace Opc.Ua.Server out DiagnosticInfoCollection diagnosticInfos) { // find subscription. - Subscription subscription = null; + ISubscription subscription = null; lock (m_lock) { @@ -2003,7 +2003,7 @@ namespace Opc.Ua.Server /// /// Creates a new instance of a subscription. /// - protected virtual Subscription CreateSubscription( + protected virtual ISubscription CreateSubscription( OperationContext context, uint subscriptionId, double publishingInterval, @@ -2072,7 +2072,7 @@ namespace Opc.Ua.Server DateTime start = DateTime.UtcNow; SessionPublishQueue[] queues = null; - Subscription[] abandonedSubscriptions = null; + ISubscription[] abandonedSubscriptions = null; lock (m_lock) { @@ -2083,7 +2083,7 @@ namespace Opc.Ua.Server // collect abandoned subscriptions. if (m_abandonedSubscriptions != null && m_abandonedSubscriptions.Count > 0) { - abandonedSubscriptions = new Subscription[m_abandonedSubscriptions.Count]; + abandonedSubscriptions = new ISubscription[m_abandonedSubscriptions.Count]; for (int ii = 0; ii < abandonedSubscriptions.Length; ii++) { @@ -2101,11 +2101,11 @@ namespace Opc.Ua.Server // check the publish timer for each abandoned subscription. if (abandonedSubscriptions != null) { - List subscriptionsToDelete = new List(); + List subscriptionsToDelete = new List(); for (int ii = 0; ii < abandonedSubscriptions.Length; ii++) { - Subscription subscription = abandonedSubscriptions[ii]; + ISubscription subscription = abandonedSubscriptions[ii]; if (subscription.PublishTimerExpired() != PublishingState.Expired) { @@ -2114,7 +2114,7 @@ namespace Opc.Ua.Server if (subscriptionsToDelete == null) { - subscriptionsToDelete = new List(); + subscriptionsToDelete = new List(); } subscriptionsToDelete.Add(subscription); @@ -2215,7 +2215,7 @@ namespace Opc.Ua.Server /// /// The server. /// The subscriptions to delete. - internal static void CleanupSubscriptions(IServerInternal server, IList subscriptionsToDelete) + internal static void CleanupSubscriptions(IServerInternal server, IList subscriptionsToDelete) { if (subscriptionsToDelete != null && subscriptionsToDelete.Count > 0) { @@ -2239,9 +2239,9 @@ namespace Opc.Ua.Server object[] args = (object[])data; IServerInternal server = (IServerInternal)args[0]; - List subscriptions = (List)args[1]; + List subscriptions = (List)args[1]; - foreach (Subscription subscription in subscriptions) + foreach (ISubscription subscription in subscriptions) { server.DeleteSubscription(subscription.Id); } @@ -2266,13 +2266,13 @@ namespace Opc.Ua.Server #region ConditionRefreshTask Class private class ConditionRefreshTask { - public ConditionRefreshTask(Subscription subscription, uint monitoredItemId) + public ConditionRefreshTask(ISubscription subscription, uint monitoredItemId) { Subscription = subscription; MonitoredItemId = monitoredItemId; } - public Subscription Subscription { get; private set; } + public ISubscription Subscription { get; private set; } public uint MonitoredItemId { get; private set; } public override bool Equals(Object obj) @@ -2313,8 +2313,8 @@ namespace Opc.Ua.Server private int m_maxPublishRequestCount; private int m_maxSubscriptionCount; private bool m_durableSubscriptionsEnabled; - private Dictionary m_subscriptions; - private List m_abandonedSubscriptions; + private Dictionary m_subscriptions; + private List m_abandonedSubscriptions; private NodeIdDictionary> m_statusMessages; private NodeIdDictionary m_publishQueues; private ManualResetEvent m_shutdownEvent; @@ -2352,7 +2352,7 @@ namespace Opc.Ua.Server /// Returns all of the subscriptions known to the subscription manager. /// /// A list of the subscriptions. - IList GetSubscriptions(); + IList GetSubscriptions(); /// /// Set a subscription into durable mode @@ -2368,5 +2368,5 @@ namespace Opc.Ua.Server /// /// The subscription that was affected. /// True if the subscription was deleted. - public delegate void SubscriptionEventHandler(Subscription subscription, bool deleted); + public delegate void SubscriptionEventHandler(ISubscription subscription, bool deleted); }