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;
            }
        }
Example #2
0
        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);
            }
        }
Example #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) {
                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);
            }
        }