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); } }