public IcmTickPriceHarvester(IcmExchangeConfiguration config, IcmModelConverter modelConverter, IHandler <TickPrice> tickPriceHandler, ILog log)
        {
            _log     = log;
            _enabled = config.RabbitMq.Enabled;
            if (!_enabled)
            {
                return;
            }
            var instruments    = config.SupportedCurrencySymbols.Select(x => new Instrument(IcmExchange.Name, x.LykkeSymbol).Name).ToHashSet();
            var rabbitSettings = new RabbitMqSubscriptionSettings
            {
                ConnectionString = config.RabbitMq.ConnectionString,
                ExchangeName     = config.RabbitMq.Exchange,
                QueueName        = config.RabbitMq.Queue
            };
            var errorStrategy = new DefaultErrorHandlingStrategy(_log, rabbitSettings);

            _rabbit = new RabbitMqSubscriber <OrderBook>(rabbitSettings, errorStrategy)
                      .SetMessageDeserializer(new GenericRabbitModelConverter <OrderBook>())
                      .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy())
                      .SetConsole(new LogToConsole())
                      .SetLogger(_log)
                      .Subscribe(async orderBook =>
            {
                if (instruments.Contains(orderBook.Asset))
                {
                    var tickPrice = modelConverter.ToTickPrice(orderBook);
                    if (tickPrice != null)
                    {
                        await tickPriceHandler.Handle(tickPrice);
                    }
                }
            });
        }
        public IcmExchange(IcmTickPriceHarvester tickPriceHarvester,

                           IcmExchangeConfiguration config,
                           TranslatedSignalsRepository translatedSignalsRepository,
                           IcmModelConverter converter,
                           ILog log)
            : base(Name, config, translatedSignalsRepository, log)
        {
            _config                = config;
            _converter             = converter;
            _tickPriceHarvester    = tickPriceHarvester;
            _tradeSessionConnector = new IcmTradeSessionConnector(new FixConnectorConfiguration(config.Password, config.GetFixConfigAsReader()), log);
            _log = log;
        }
        public IcmTickPriceHarvester(
            IcmExchangeConfiguration config,
            IcmModelConverter modelConverter,
            IHandler <TickPrice> tickPriceHandler,
            IHandler <Trading.OrderBook> orderBookHandler,
            ILog log)
        {
            _config           = config;
            _modelConverter   = modelConverter;
            _tickPriceHandler = tickPriceHandler;
            _orderBookHandler = orderBookHandler;
            _log     = log;
            _enabled = config.RabbitMq.Enabled;
            if (!_enabled)
            {
                return;
            }
            _instruments = config.SupportedCurrencySymbols.Select(x => new Instrument(IcmExchange.Name, x.LykkeSymbol).Name).ToHashSet();
            var rabbitSettings = new RabbitMqSubscriptionSettings
            {
                ConnectionString = config.RabbitMq.ConnectionString,
                ExchangeName     = config.RabbitMq.Exchange,
                QueueName        = config.RabbitMq.Queue
            };
            var errorStrategy = new DefaultErrorHandlingStrategy(_log, rabbitSettings);

            if (_config.Enabled)
            {
                _rabbit = new RabbitMqSubscriber <OrderBook>(rabbitSettings, errorStrategy)
                          .SetMessageDeserializer(new GenericRabbitModelConverter <OrderBook>())
                          .SetMessageReadStrategy(new MessageReadWithTemporaryQueueStrategy())
                          .SetConsole(new LogToConsole())
                          .SetLogger(_log)
                          .Subscribe(HandleOrderBook);
            }
        }