public B2С2RestClient(
            B2C2ClientSettings settings,
            IHttpClientFactory clientFactory,
            ILogFactory logFactory)
        {
            if (settings == null)
            {
                throw new NullReferenceException(nameof(settings));
            }
            var url = settings.Url;
            var authorizationToken = settings.AuthorizationToken;

            if (string.IsNullOrWhiteSpace(url) || !Uri.TryCreate(url, UriKind.Absolute, out _))
            {
                throw new ArgumentOutOfRangeException(nameof(url));
            }
            if (string.IsNullOrWhiteSpace(authorizationToken))
            {
                throw new ArgumentOutOfRangeException(nameof(authorizationToken));
            }
            if (logFactory == null)
            {
                throw new NullReferenceException(nameof(logFactory));
            }

            url         = url[url.Length - 1] == '/' ? url.Substring(0, url.Length - 1) : url;
            _httpClient = clientFactory.CreateClient(ClientNames.B2C2ClientName);
            _log        = logFactory.CreateLog(this);
        }
Esempio n. 2
0
        public B2С2RestClient(B2C2ClientSettings settings, ILogFactory logFactory)
        {
            if (settings == null)
            {
                throw new NullReferenceException(nameof(settings));
            }
            var url = settings.Url;
            var authorizationToken = settings.AuthorizationToken;

            if (string.IsNullOrWhiteSpace(url) || !Uri.TryCreate(url, UriKind.Absolute, out _))
            {
                throw new ArgumentOutOfRangeException(nameof(url));
            }
            if (string.IsNullOrWhiteSpace(authorizationToken))
            {
                throw new ArgumentOutOfRangeException(nameof(authorizationToken));
            }
            if (logFactory == null)
            {
                throw new NullReferenceException(nameof(logFactory));
            }

            url         = url[url.Length - 1] == '/' ? url.Substring(0, url.Length - 1) : url;
            _httpClient = new HttpClient {
                BaseAddress = new Uri(url)
            };
            _httpClient.DefaultRequestHeaders.Add("Authorization", $"Token {authorizationToken}");
            _log = logFactory.CreateLog(this);
        }
Esempio n. 3
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;
        }
Esempio n. 4
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));
        }
        /// <summary>
        /// Registers <see cref="IB2С2WebSocketClient"/> in Autofac container using <see cref="B2C2ClientSettings"/>.
        /// </summary>
        /// <param name="builder">Autofac container builder.</param>
        /// <param name="settings">MarketMakerArbitrageDetector client settings.</param>
        public static void RegisterB2С2WebSocketClient(
            [NotNull] this ContainerBuilder builder,
            [NotNull] B2C2ClientSettings settings)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            builder.RegisterType <B2С2WebSocketClient>()
            .As <IB2С2WebSocketClient>()
            .SingleInstance()
            .WithParameter(TypedParameter.From(settings));
        }
Esempio n. 6
0
        public B2С2WebSocketClient(B2C2ClientSettings settings, ILogFactory logFactory, TimeSpan?timeOut = null)
        {
            if (settings == null)
            {
                throw new NullReferenceException(nameof(settings));
            }
            var url = settings.Url;
            var authorizationToken = settings.AuthorizationToken;

            if (string.IsNullOrWhiteSpace(url) || !Uri.TryCreate(url, UriKind.Absolute, out _))
            {
                throw new ArgumentOutOfRangeException(nameof(url));
            }
            if (string.IsNullOrWhiteSpace(authorizationToken))
            {
                throw new ArgumentOutOfRangeException(nameof(authorizationToken));
            }
            if (logFactory == null)
            {
                throw new NullReferenceException(nameof(logFactory));
            }
            if (timeOut.HasValue)
            {
                _timeOut = timeOut.Value;
            }

            _baseUri            = url[url.Length - 1] == '/' ? url.Substring(0, url.Length - 1) : url;
            _authorizationToken = authorizationToken;
            _log                     = logFactory.CreateLog(this);
            _clientWebSocket         = new ClientWebSocket();
            _awaitingSubscriptions   = new ConcurrentDictionary <string, Subscription>();
            _instrumentsHandlers     = new ConcurrentDictionary <string, Func <PriceMessage, Task> >();
            _awaitingUnsubscriptions = new ConcurrentDictionary <string, Subscription>();
            _tradableInstruments     = new List <string>();
            _cancellationTokenSource = new CancellationTokenSource();
        }
        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));

            // ZeroMq publishing channel
            builder.RegisterType <ZeroMqOrderBookPublisher>()
            .AsSelf()
            .As <ZeroMqOrderBookPublisher>()
            .SingleInstance()
            .WithParameter(TypedParameter.From(_settings.VenueName))
            .WithParameter(TypedParameter.From(_settings.ZeroMq));

            builder.RegisterType <ZeroMqOrderPublisherDispatcher>()
            .As <IHostedService>()
            .SingleInstance();

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

            builder.RegisterType <OrderBooksService>()
            .AsSelf()
            .SingleInstance()
            .WithParameter(TypedParameter.From(_settings.AssetMappings))
            .WithParameter(TypedParameter.From(_settings))
            .WithParameter(TypedParameter.From(_settings.InstrumentsToLogLatency ?? Array.Empty <string>()))
            .WithParameter(TypedParameter.From(webSocketSettings));

            // Reports

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

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

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

            builder.RegisterInstance(_settings);
        }