/// <summary> /// The DI constructor. /// </summary> /// <param name="client">The JSON client (required).</param> /// <param name="controller">The web socket stream controller (required).</param> /// <param name="streamControl">The web socket stream control (required).</param> /// <param name="logger">The logger (optional).</param> public UserDataWebSocketClientManager(IUserDataClient client, IWebSocketStreamController controller, IUserDataWebSocketStreamControl streamControl, ILogger <UserDataWebSocketClientManager> logger = null) : base(client, controller, logger) { Throw.IfNull(streamControl, nameof(streamControl)); _streamControl = streamControl; _streamControl.ListenKeyUpdate += (s, a) => { try { if (a.NewListenKey == null) { Logger?.LogError($"{nameof(UserDataWebSocketClientManager)}: Failed to get new listen key."); return; } // Unsubscribe client from stream. Controller.Stream.Unsubscribe(Client, a.OldListenKey); // Update client listen key. HandleListenKeyChange(a.OldListenKey, a.NewListenKey); // Subscribe client to new stream. Controller.Stream.Subscribe(Client, a.NewListenKey); } catch (Exception e) { Logger?.LogError(e, $"{nameof(UserDataWebSocketClientManager)}: Failed to update listen key."); } }; }
/// <summary> /// The DI constructor. /// </summary> /// <param name="client">The JSON client (required).</param> /// <param name="controller">The web socket stream controller (required).</param> /// <param name="logger">The logger (optional).</param> public CandlestickWebSocketClientManager(ICandlestickClient client, IWebSocketStreamController controller, ILogger <CandlestickWebSocketClientManager> logger = null) : base(client, controller, logger) { }
/// <summary> /// The DI constructor. /// </summary> /// <param name="client">The JSON client (required).</param> /// <param name="controller">The web socket stream controller (required).</param> /// <param name="logger">The logger (optional).</param> public TradeWebSocketClientManager(ITradeClient client, IWebSocketStreamController controller, ILogger <TradeWebSocketClientManager> logger = null) : base(client, controller, logger) { }
/// <summary> /// The DI constructor. /// </summary> /// <param name="client">The JSON client (required).</param> /// <param name="controller">The web socket stream controller (required).</param> /// <param name="logger">The logger (optional).</param> public DepthWebSocketClientManager(IDepthClient client, IWebSocketStreamController controller, ILogger <DepthWebSocketClientManager> logger = null) : base(client, controller, logger) { }
/// <summary> /// The DI constructor. /// </summary> /// <param name="client">The JSON client (required).</param> /// <param name="controller">The web socket stream controller (required).</param> /// <param name="logger">The logger (optional).</param> public SymbolStatisticsWebSocketClientManager(ISymbolStatisticsClient client, IWebSocketStreamController controller, ILogger <SymbolStatisticsWebSocketClientManager> logger = null) : base(client, controller, logger) { }
/// <summary> /// Wait until web socket is open. /// </summary> /// <param name="controller"></param> /// <param name="token"></param> /// <returns></returns> public static Task WaitUntilWebSocketOpenAsync(this IWebSocketStreamController controller, CancellationToken token = default) => controller.Stream.WebSocket.WaitUntilOpenAsync(token);