public IList<Subscription> Close()
{
lock (m_lock)
{
// TraceState("SESSION CLOSED");
// wake up any waiting publish requests.
m_publishEvent.Set();
while (m_queuedRequests.Count > 0)
{
QueuedRequest request = m_queuedRequests.First.Value;
m_queuedRequests.RemoveFirst();
request.Error = StatusCodes.BadSessionClosed;
request.Set();
}
// tell the subscriptions that the session is closed.
Subscription[] subscriptions = new Subscription[m_queuedSubscriptions.Count];
for (int ii = 0; ii < m_queuedSubscriptions.Count; ii++)
{
subscriptions[ii] = m_queuedSubscriptions[ii].Subscription;
subscriptions[ii].SessionClosed();
}
// clear the queue.
m_queuedSubscriptions.Clear();
return subscriptions;
}
}