public DefaultChannelGroup(
     IChannelConnector connector, IChannelGroupConfiguration configuration, IWorkerGroup <IMessagingChannel> workers)
 {
     this.connector     = connector;
     this.configuration = configuration;
     this.workers       = workers;
 }
        protected static Mock <IMessagingChannel> Create(IChannelGroupConfiguration config)
        {
            var mock = new Mock <IMessagingChannel>();

            mock.Setup(x => x.CurrentConfiguration).Returns(config);
            mock.Setup(x => x.Active).Returns(true);
            mockChannels.Add(mock);
            return(mock);
        }
		public SynchronousChannelGroup(IChannelConnector connector, IChannelGroupConfiguration configuration)
		{
			if (connector == null)
				throw new ArgumentNullException("connector");

			if (configuration == null)
				throw new ArgumentNullException("configuration");

			this.connector = connector;
			this.configuration = configuration;
		}
		public virtual IChannelGroup Build(IChannelConnector connector, IChannelGroupConfiguration configuration)
		{
			if (connector == null)
				throw new ArgumentNullException("connector");

			if (configuration == null)
				throw new ArgumentNullException("configuration");

			Log.Debug("Building channel group named '{0}'.", configuration.GroupName);

			var workers = new TaskWorkerGroup<IMessagingChannel>(configuration.MinWorkers, configuration.MaxWorkers);
			return new DefaultChannelGroup(connector, configuration, workers);
		}
        public SynchronousChannelGroup(IChannelConnector connector, IChannelGroupConfiguration configuration)
        {
            if (connector == null)
            {
                throw new ArgumentNullException("connector");
            }

            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }

            this.connector     = connector;
            this.configuration = configuration;
        }
        public RabbitChannel(
            IModel channel,
            IConnection connection,
            IChannelConnector connector,
            RabbitChannelGroupConfiguration configuration,
            Func <RabbitSubscription> subscriptionFactory) : this()
        {
            this.channel              = channel;
            this.connection           = connection;
            this.connector            = connector;
            this.CurrentConfiguration = this.configuration = configuration;
            this.adapter              = configuration.MessageAdapter;
            this.transactionType      = configuration.TransactionType;
            this.subscriptionFactory  = subscriptionFactory;
            this.CurrentResolver      = configuration.DependencyResolver;
            this.identifier           = Interlocked.Increment(ref counter);

            this.CurrentTransaction = new RabbitTransaction(this, this.transactionType);
            if (this.transactionType == RabbitTransactionType.Full)
            {
                Log.Debug("Marking channel {0} as transactional.", this.identifier);
                this.channel.TxSelect();
            }

            if (this.configuration.ChannelBuffer <= 0 || this.configuration.DispatchOnly)
            {
                return;
            }

            var buffer = this.transactionType == RabbitTransactionType.None ? long.MaxValue : this.configuration.ChannelBuffer;

            Log.Debug("Buffering up to {0} message(s) on the channel {1}.", buffer, this.identifier);
            if (this.configuration.TransactionType == RabbitTransactionType.None)
            {
                return;
            }

            this.channel.BasicQos(0, (ushort)this.configuration.ChannelBuffer, false);
        }
        public virtual IChannelGroup Build(IChannelConnector connector, IChannelGroupConfiguration configuration)
        {
            if (connector == null)
            {
                throw new ArgumentNullException("connector");
            }

            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }

            if (configuration.Synchronous)
            {
                Log.Debug("Building a synchronous channel group named '{0}'.", configuration.GroupName);
                return(new SynchronousChannelGroup(connector, configuration));
            }

            Log.Debug("Building an asynchronous channel group named '{0}'.", configuration.GroupName);
            var workers = new TaskWorkerGroup <IMessagingChannel>(
                configuration.MinWorkers, configuration.MaxWorkers, configuration.MaxDispatchBuffer);

            return(new DefaultChannelGroup(connector, configuration, workers));
        }
		public RabbitChannel(
			IModel channel,
			RabbitChannelGroupConfiguration configuration,
			Func<RabbitSubscription> subscriptionFactory) : this()
		{
			this.channel = channel;
			this.CurrentConfiguration = this.configuration = configuration;
			this.adapter = configuration.MessageAdapter;
			this.transactionType = configuration.TransactionType;
			this.subscriptionFactory = subscriptionFactory;
			this.CurrentResolver = configuration.DependencyResolver;

			this.CurrentTransaction = new RabbitTransaction(this, this.transactionType);
			if (this.transactionType == RabbitTransactionType.Full)
			{
				Log.Debug("Marking channel as transactional.");
				this.channel.TxSelect();
			}

			if (this.configuration.ChannelBuffer <= 0 || this.configuration.DispatchOnly)
				return;

			Log.Debug("Buffering up to {0} message(s) on the channel.", this.configuration.ChannelBuffer);
			this.channel.BasicQos(0, (ushort)this.configuration.ChannelBuffer, false);
		}
		public RabbitChannel(
			IModel channel,
			IChannelConnector connector,
			RabbitChannelGroupConfiguration configuration,
			Func<RabbitSubscription> subscriptionFactory) : this()
		{
			this.channel = channel;
			this.connector = connector;
			this.CurrentConfiguration = this.configuration = configuration;
			this.adapter = configuration.MessageAdapter;
			this.transactionType = configuration.TransactionType;
			this.subscriptionFactory = subscriptionFactory;
			this.CurrentResolver = configuration.DependencyResolver;
			this.identifier = Interlocked.Increment(ref counter);

			this.CurrentTransaction = new RabbitTransaction(this, this.transactionType);
			if (this.transactionType == RabbitTransactionType.Full)
			{
				Log.Debug("Marking channel {0} as transactional.", this.identifier);
				this.channel.TxSelect();
			}

			if (this.configuration.ChannelBuffer <= 0 || this.configuration.DispatchOnly)
				return;

			var buffer = this.transactionType == RabbitTransactionType.None ? long.MaxValue : this.configuration.ChannelBuffer;
			Log.Debug("Buffering up to {0} message(s) on the channel {1}.", buffer, this.identifier);
			if (this.configuration.TransactionType == RabbitTransactionType.None)
				return;

			this.channel.BasicQos(0, (ushort)this.configuration.ChannelBuffer, false);
		}
		public DefaultChannelGroup(
			IChannelConnector connector, IChannelGroupConfiguration configuration, IWorkerGroup<IMessagingChannel> workers)
		{
			this.connector = connector;
			this.configuration = configuration;
			this.workers = workers;
		}
		protected static Mock<IMessagingChannel> Create(IChannelGroupConfiguration config)
		{
			var mock = new Mock<IMessagingChannel>();
			mock.Setup(x => x.CurrentConfiguration).Returns(config);
			mockChannels.Add(mock);
			return mock;
		}