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); }
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); }
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; }
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)); }
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); }