Пример #1
0
        public OrderBooksService(
            IB2С2RestClient b2C2RestClient,
            IOrderBookPublisher orderBookPublisher,
            ITickPricePublisher tickPricePublisher,
            OrderBooksServiceSettings settings,
            B2C2ClientSettings webSocketC2ClientSettings,
            ILogFactory logFactory)
        {
            _withWithoutSuffixMapping = new ConcurrentDictionary <string, string>();
            _withoutWithSuffixMapping = new ConcurrentDictionary <string, string>();
            _orderBooksCache          = new ConcurrentDictionary <string, OrderBook>();
            _subscriptions            = new ConcurrentDictionary <string, string>();

            _instrumentsLevels = settings.InstrumentsLevels == null || !settings.InstrumentsLevels.Any()
                ? throw new ArgumentOutOfRangeException(nameof(_instrumentsLevels)) : settings.InstrumentsLevels;

            _b2C2RestClient            = b2C2RestClient ?? throw new NullReferenceException(nameof(b2C2RestClient));
            _webSocketC2ClientSettings = webSocketC2ClientSettings ?? throw new NullReferenceException(nameof(webSocketC2ClientSettings));

            _orderBookPublisher = orderBookPublisher ?? throw new NullReferenceException(nameof(orderBookPublisher));
            _tickPricePublisher = tickPricePublisher ?? throw new NullReferenceException(nameof(tickPricePublisher));

            _logFactory = logFactory;
            _log        = logFactory.CreateLog(this);

            _reconnectIfNeededInterval = settings.ReconnectIfNeededInterval;
            _reconnectIfNeededTrigger  = new TimerTrigger(nameof(OrderBooksService), settings.ReconnectIfNeededInterval, logFactory, ReconnectIfNeeded);
            _forceReconnectTrigger     = new TimerTrigger(nameof(OrderBooksService), settings.ForceReconnectInterval, logFactory, ForceReconnect);

            _settings = settings;
        }
Пример #2
0
        protected override void Load(ContainerBuilder builder)
        {
            var webSocketSettings = new B2C2ClientSettings(_settings.WebSocketUrl, _settings.AuthorizationToken);

            builder.RegisterType <Manager>()
            .As <IStartupManager>()
            .As <IShutdownManager>()
            .AutoWireNonPublicProperties();

            // B2C2 Client Library
            builder.RegisterB2С2RestClient(new B2C2ClientSettings(_settings.RestUrl, _settings.AuthorizationToken));

            // Publishers
            builder.RegisterType <OrderBookPublisher>()
            .AsSelf()
            .As <IOrderBookPublisher>()
            .SingleInstance()
            .WithParameter(TypedParameter.From(_settings.RabbitMq.OrderBooks));

            builder.RegisterType <TickPricePublisher>()
            .AsSelf()
            .As <ITickPricePublisher>()
            .SingleInstance()
            .WithParameter(TypedParameter.From(_settings.RabbitMq.TickPrices));

            // Order books service
            var orderBooksServiceSettings = new OrderBooksServiceSettings
            {
                InstrumentsLevels         = _settings.InstrumentLevels,
                ReconnectIfNeededInterval = _settings.ReconnectIfNeededInterval,
                ForceReconnectInterval    = _settings.ForceReconnectInterval
            };

            builder.RegisterType <OrderBooksService>()
            .AsSelf()
            .SingleInstance()
            .WithParameter(TypedParameter.From(orderBooksServiceSettings))
            .WithParameter(TypedParameter.From(webSocketSettings));

            // Reports

            builder.RegisterType <TradeHistoryService>()
            .AsSelf()
            .SingleInstance()
            .WithParameter(TypedParameter.From(_settings.Db.ReportSqlConnString))
            .WithParameter(TypedParameter.From(_settings.EnableExportToReportDb));

            builder.RegisterType <BalanceHistoryService>()
            .AsSelf()
            .SingleInstance()
            .WithParameter(TypedParameter.From(_settings.Db.ReportSqlConnString))
            .WithParameter(TypedParameter.From(_settings.EnableExportToReportDb));

            builder.RegisterType <LedgerHistoryService>()
            .AsSelf()
            .SingleInstance()
            .WithParameter(TypedParameter.From(_settings.Db.ReportSqlConnString))
            .WithParameter(TypedParameter.From(_settings.EnableExportToReportDb));
        }