private TinyMessageSubscriptionToken AddSubscriptionInternal<TMessage>(Action<TMessage> deliveryAction, Func<TMessage, bool> messageFilter, bool strongReference, ITinyMessageProxy proxy) where TMessage : class, ITinyMessage { if (deliveryAction == null) throw new ArgumentNullException("deliveryAction"); if (messageFilter == null) throw new ArgumentNullException("messageFilter"); if (proxy == null) throw new ArgumentNullException("proxy"); lock (_SubscriptionsPadlock) { List<SubscriptionItem> currentSubscriptions; if (!_Subscriptions.TryGetValue(typeof(TMessage), out currentSubscriptions)) { currentSubscriptions = new List<SubscriptionItem>(); _Subscriptions[typeof(TMessage)] = currentSubscriptions; } var subscriptionToken = new TinyMessageSubscriptionToken(this, typeof(TMessage)); ITinyMessageSubscription subscription; if (strongReference) subscription = new StrongTinyMessageSubscription<TMessage>(subscriptionToken, deliveryAction, messageFilter); else subscription = new WeakTinyMessageSubscription<TMessage>(subscriptionToken, deliveryAction, messageFilter); currentSubscriptions.Add(new SubscriptionItem(proxy, subscription)); return subscriptionToken; } }
private MessageHubSubscriptionToken AddSubscriptionInternal <TMessage>( Action <TMessage> deliveryAction, Func <TMessage, bool> messageFilter, bool strongReference, IMessageHubProxy proxy) where TMessage : class, IMessageHubMessage { if (deliveryAction == null) { throw new ArgumentNullException(nameof(deliveryAction)); } if (messageFilter == null) { throw new ArgumentNullException(nameof(messageFilter)); } if (proxy == null) { throw new ArgumentNullException(nameof(proxy)); } lock (_subscriptionsPadlock) { if (!_subscriptions.TryGetValue(typeof(TMessage), out var currentSubscriptions)) { currentSubscriptions = new List <SubscriptionItem>(); _subscriptions[typeof(TMessage)] = currentSubscriptions; } var subscriptionToken = new MessageHubSubscriptionToken(this, typeof(TMessage)); IMessageHubSubscription subscription; if (strongReference) { subscription = new StrongTinyMessageSubscription <TMessage>( subscriptionToken, deliveryAction, messageFilter); } else { subscription = new WeakTinyMessageSubscription <TMessage>( subscriptionToken, deliveryAction, messageFilter); } currentSubscriptions.Add(new SubscriptionItem(proxy, subscription)); return(subscriptionToken); } }
private TinyMessageSubscriptionToken AddSubscriptionInternal <TMessage>( Action <TMessage> deliveryAction, Func <TMessage, bool> messageFilter, bool strongReference, ITinyMessageProxy proxy) where TMessage : class, ITinyMessage { if (deliveryAction == null) { throw new ArgumentNullException("deliveryAction"); } if (messageFilter == null) { throw new ArgumentNullException("messageFilter"); } if (proxy == null) { throw new ArgumentNullException("proxy"); } lock (_SubscriptionsPadlock) { var subscriptionToken = new TinyMessageSubscriptionToken(this, typeof(TMessage)); ITinyMessageSubscription subscription; if (strongReference) { subscription = new StrongTinyMessageSubscription <TMessage>(subscriptionToken, deliveryAction, messageFilter); } else { subscription = new WeakTinyMessageSubscription <TMessage>(subscriptionToken, deliveryAction, messageFilter); } _Subscriptions.Add(new SubscriptionItem(proxy, subscription)); return(subscriptionToken); } }