public void Remove(Subscription subscription)
{
if (subscription == null) throw new ArgumentNullException("subscription");
lock (m_lock)
{
// remove the subscription from the queue.
for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++)
{
if (Object.ReferenceEquals(m_queuedSubscriptions[ii].Subscription, subscription))
{
m_queuedSubscriptions.RemoveAt(ii);
break;
}
}
// remove any outstanding publishes.
if (m_queuedSubscriptions.Count == 0)
{
while (m_queuedRequests.Count > 0)
{
QueuedRequest request = m_queuedRequests.First.Value;
request.Error = StatusCodes.BadNoSubscription;
request.Set();
m_queuedRequests.RemoveFirst();
}
}
// TraceState("SUBSCRIPTION REMOVED");
}
}