public void Handle(TcpMessage.ConnectionClosed message)
        {
            List <string> subscriptionGroupsToRemove = null;

            foreach (var subscriptionGroup in _subscriptionTopics)
            {
                var subscriptions = subscriptionGroup.Value;
                for (int i = 0, n = subscriptions.Count; i < n; ++i)
                {
                    if (subscriptions[i].ConnectionId == message.Connection.ConnectionId)
                    {
                        _subscriptionsById.Remove(subscriptions[i].CorrelationId);
                    }
                }

                subscriptions.RemoveAll(x => x.ConnectionId == message.Connection.ConnectionId);
                if (subscriptions.Count == 0)                 // schedule removal of list instance
                {
                    if (subscriptionGroupsToRemove == null)
                    {
                        subscriptionGroupsToRemove = new List <string>();
                    }
                    subscriptionGroupsToRemove.Add(subscriptionGroup.Key);
                }
            }

            if (subscriptionGroupsToRemove != null)
            {
                for (int i = 0, n = subscriptionGroupsToRemove.Count; i < n; ++i)
                {
                    _subscriptionTopics.Remove(subscriptionGroupsToRemove[i]);
                }
            }
        }
 public void Handle(TcpMessage.ConnectionClosed message)
 {
     //TODO CC make a map for this
     Log.Debug("Persistent subscription lost connection from {0}", message.Connection.RemoteEndPoint);
     if (_subscriptionsById == null)
     {
         return;                             //havn't built yet.
     }
     foreach (var subscription in _subscriptionsById.Values)
     {
         subscription.RemoveClientByConnectionId(message.Connection.ConnectionId);
     }
 }