Ejemplo n.º 1
0
 public SubscriptionItem(ITinyMessageProxy proxy, ITinyMessageSubscription subscription)
 {
     Proxy        = proxy;
     Subscription = subscription;
 }
Ejemplo n.º 2
0
 /// <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));
 }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 /// <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);
 }
Ejemplo n.º 7
0
        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);
            }
        }