public override BoltConnection NewConnection(BoltChannel channel, BoltStateMachine stateMachine)
        {
            requireNonNull(channel);
            requireNonNull(stateMachine);

            BoltScheduler              scheduler              = _schedulerProvider.get(channel);
            BoltConnectionReadLimiter  readLimiter            = CreateReadLimiter(_config, _logService);
            BoltConnectionQueueMonitor connectionQueueMonitor = new BoltConnectionQueueMonitorAggregate(scheduler, readLimiter);
            ChunkedOutput              chunkedOutput          = new ChunkedOutput(channel.RawChannel(), _throttleGroup);

            BoltConnection connection;

            if (_monitors.hasListeners(typeof(BoltConnectionMetricsMonitor)))
            {
                connection = new MetricsReportingBoltConnection(channel, chunkedOutput, stateMachine, _logService, scheduler, connectionQueueMonitor, _metricsMonitor, _clock);
            }
            else
            {
                connection = new DefaultBoltConnection(channel, chunkedOutput, stateMachine, _logService, scheduler, connectionQueueMonitor);
            }

            connection.Start();

            return(connection);
        }
        public override BoltScheduler Get(BoltChannel channel)
        {
            BoltScheduler boltScheduler = _boltSchedulers[channel.Connector()];

            if (boltScheduler == null)
            {
                throw new System.ArgumentException(string.Format("Provided channel instance [local: {0}, remote: {1}] is not bound to any known bolt listen addresses.", channel.ServerAddress(), channel.ClientAddress()));
            }

            return(boltScheduler);
        }
 private void StopScheduler(BoltScheduler scheduler)
 {
     try
     {
         scheduler.Stop();
     }
     catch (Exception t)
     {
         _internalLog.warn(string.Format("An unexpected error occurred while stopping BoltScheduler [{0}]", scheduler.Connector()), t);
     }
 }