public SubscriptionItem(ITinyMessageProxy proxy, ITinyMessageSubscription subscription) { Proxy = proxy; Subscription = subscription; }
/// <summary> /// Subscribe to a message type with the given destination and delivery action. /// Messages will be delivered via the specified proxy. /// /// All messages of this type will be delivered. /// </summary> /// <typeparam name="TMessage">Type of message</typeparam> /// <param name="deliveryAction">Action to invoke when message is delivered</param> /// <param name="useStrongReferences">Use strong references to destination and deliveryAction </param> /// <param name="proxy">Proxy to use when delivering the messages</param> /// <returns>TinyMessageSubscription used to unsubscribing</returns> public TinyMessageSubscriptionToken Subscribe <TMessage>(Action <TMessage> deliveryAction, bool useStrongReferences, ITinyMessageProxy proxy) where TMessage : class, ITinyMessage { return(AddSubscriptionInternal <TMessage>(deliveryAction, (m) => true, useStrongReferences, proxy)); }
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); } }
/// <summary> /// Subscribe to a message type with the given destination and delivery action with the given filter. /// Messages will be delivered via the specified proxy. /// All references (apart from the proxy) are held with WeakReferences /// /// Only messages that "pass" the filter will be delivered. /// </summary> /// <typeparam name="TMessage">Type of message</typeparam> /// <param name="deliveryAction">Action to invoke when message is delivered</param> /// <param name="proxy">Proxy to use when delivering the messages</param> /// <returns>TinyMessageSubscription used to unsubscribing</returns> public TinyMessageSubscriptionToken Subscribe <TMessage>(Action <TMessage> deliveryAction, Func <TMessage, bool> messageFilter, ITinyMessageProxy proxy) where TMessage : class, ITinyMessage { return(AddSubscriptionInternal <TMessage>(deliveryAction, messageFilter, true, proxy)); }
/// <summary> /// Subscribe to a message type with the given destination and delivery action with the given filter. /// Messages will be delivered via the specified proxy. /// All references are held with WeakReferences /// /// Only messages that "pass" the filter will be delivered. /// </summary> /// <typeparam name="TMessage">Type of message</typeparam> /// <param name="deliveryAction">Action to invoke when message is delivered</param> /// <param name="useStrongReferences">Use strong references to destination and deliveryAction </param> /// <param name="proxy">Proxy to use when delivering the messages</param> /// <returns>TinyMessageSubscription used to unsubscribing</returns> public TinyMessageSubscriptionToken Subscribe<TMessage>(Action<TMessage> deliveryAction, Func<TMessage, bool> messageFilter, bool useStrongReferences, ITinyMessageProxy proxy) where TMessage : class, ITinyMessage { return AddSubscriptionInternal<TMessage>(deliveryAction, messageFilter, useStrongReferences, proxy); }
/// <summary> /// Subscribe to a message type with the given destination and delivery action. /// Messages will be delivered via the specified proxy. /// All references (apart from the proxy) are held with strong references /// /// All messages of this type will be delivered. /// </summary> /// <typeparam name="TMessage">Type of message</typeparam> /// <param name="deliveryAction">Action to invoke when message is delivered</param> /// <param name="proxy">Proxy to use when delivering the messages</param> /// <returns>TinyMessageSubscription used to unsubscribing</returns> public TinyMessageSubscriptionToken Subscribe<TMessage>(Action<TMessage> deliveryAction, ITinyMessageProxy proxy) where TMessage : class, ITinyMessage { return AddSubscriptionInternal<TMessage>(deliveryAction, (m) => true, true, proxy); }
private TinyMessageSubscriptionToken AddSubscriptionInternal <TMessage>(Action <TMessage> deliveryAction, Func <TMessage, bool> messageFilter, bool strongReference, ITinyMessageProxy proxy) where TMessage : class { 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); } }