private UnsubscribeAction SendAddSubscription(SubscriptionInformation info) { if (_ignoredSubscriptions.Contains(info.MessageName)) { return(() => true); } var add = new AddSubscription(info); ClientSubscriptionInformation clientInfo = _mapper.Transform(info); if (clientInfo.Unsubscribe == null) { clientInfo.Unsubscribe = () => true; } lock (_subscriptions) { _subscriptions.Add(clientInfo.SubscriptionId, clientInfo); } _subscriptionServiceEndpoint.Send(add); return(() => { var remove = new RemoveSubscription(info, _sequence.Next()); _subscriptionServiceEndpoint.Send(remove); return true; }); }
private void Remove(SubscriptionInformation subscription) { if (!_subscriptions.Contains(subscription.SubscriptionId)) { return; } _log.Debug("SubscriptionClient Remove: " + subscription); lock (_subscriptions) { if (!_subscriptions.Contains(subscription.SubscriptionId)) { return; } ClientSubscriptionInformation subscriptionInformation = _subscriptions[subscription.SubscriptionId]; try { subscriptionInformation.Unsubscribe(); } catch (Exception ex) { _log.Error("Error removing a subscription (object may have been disposed)", ex); } _subscriptions.Remove(subscriptionInformation.SubscriptionId); } }
private void Add(SubscriptionInformation sub) { if (IgnoreIfLocalEndpoint(sub.EndpointUri)) { return; } _log.Debug("SubscriptionClient Add: " + sub); Type messageType = Type.GetType(sub.MessageName); if (messageType == null) { _log.InfoFormat("Unknown message type {0}, unable to add subscription", sub.MessageName); return; } lock (_subscriptions) { if (_subscriptions.Contains(sub.SubscriptionId)) { return; } ClientSubscriptionInformation clientInfo = _mapper.Transform(sub); UnsubscribeAction unsubscribe; Type correlatedByType = GetCorrelatedByType(sub.CorrelationId, messageType); if (correlatedByType != null) { unsubscribe = AddCorrelationSubscription(correlatedByType, sub.CorrelationId, messageType, sub.EndpointUri); } else { unsubscribe = (UnsubscribeAction)GetType() .GetMethod("AddToClients", _bindingFlags) .MakeGenericMethod(messageType).Invoke(this, new[] { sub.EndpointUri }); } clientInfo.Unsubscribe = unsubscribe; _subscriptions[sub.SubscriptionId] = clientInfo; } }