예제 #1
0
        /// <summary>
        /// Subscribes an action to be executed for every action posted to the channel. Action should be thread safe.
        /// Action may be invoked on multiple threads.
        /// </summary>
        /// <param name="subscriber"></param>
        /// <param name="subscriptions"></param>
        /// <returns></returns>
        private IDisposable SubscribeOnProducerThreads(Action <T> subscriber, ISubscriptionRegistry subscriptions)
        {
            _subscribers += subscriber;

            var unsubscriber = new Unsubscriber <T>(subscriber, this, subscriptions);

            subscriptions.RegisterSubscription(unsubscriber);

            return(unsubscriber);
        }
예제 #2
0
        public ISubscriptionTag Build(ISubscriptionRegistry registry)
        {
            var serializerFactory  = new AmqpSerializerFactory(this.Serializers);
            var amqpMessageBuilder = new AmqpMessageBuilder(serializerFactory, propertyBuilder, router);

            var subscriptionTags =
                this.subscriptions
                .Select(createSubsriptionTag => createSubsriptionTag(this.ConnectionFactory, amqpMessageBuilder, registry))
                .ToList();

            return(new CompositeSubscriptionTag(Guid.NewGuid().ToString(), subscriptionTags));
        }
예제 #3
0
        private IDisposable Subscribe(Action action, ISubscriptionRegistry subscriptionRegistery)
        {
            Monitor.Enter(syncRoot);
            try
            {
                this.Add(action);
            }
            finally
            {
                Monitor.Exit(syncRoot);
            }

            var subscriptionDisposable = new EventSubscriptionDisposable(action, this, subscriptionRegistery);

            subscriptionRegistery.RegisterSubscription(subscriptionDisposable);
            return(subscriptionDisposable);
        }
예제 #4
0
 public Unsubscriber(Action <T> receiver, Channel <T> channel, ISubscriptionRegistry subscriptions)
 {
     _receiver      = receiver;
     _channel       = channel;
     _subscriptions = subscriptions;
 }
예제 #5
0
 public EventSubscriptionDisposable(Action action, AsyncEvent asyncEvent, ISubscriptionRegistry subscriptionRegistry)
 {
     this.action               = action;
     this.asyncEvent           = asyncEvent;
     this.subscriptionRegistry = subscriptionRegistry;
 }