/// <summary> /// The DI constructor. /// </summary> /// <param name="api"></param> /// <param name="stream"></param> /// <param name="onError"></param> public BinanceWebSocketStreamController(IBinanceApi api, IWebSocketStream stream, Action <Exception> onError = null) : base(stream, onError) { Throw.IfNull(api, nameof(api)); _api = api; }
private async Task WriteMultipleAsync(IWebSocketStream stream) { while (MoveNext(out var memory)) { await stream.WriteAsync(memory); } }
/// <summary> /// Constructor. /// </summary> /// <param name="api">The Binance API.</param> /// <param name="client">The WebSocket client.</param> /// <param name="options">The options.</param> /// <param name="logger">The logger.</param> public UserDataWebSocketClient(IBinanceApi api, IWebSocketStream webSocket, IOptions <UserDataWebSocketClientOptions> options = null, ILogger <UserDataWebSocketClient> logger = null) : base(webSocket, logger) { Throw.IfNull(api, nameof(api)); Throw.IfNull(webSocket, nameof(webSocket)); _api = api; _options = options?.Value; webSocket.Client.Open += (s, e) => { var period = _options?.KeepAliveTimerPeriod ?? KeepAliveTimerPeriodDefault; period = Math.Min(Math.Max(period, KeepAliveTimerPeriodMin), KeepAliveTimerPeriodMax); _keepAliveTimer = new Timer(OnKeepAliveTimer, CancellationToken.None, period, period); }; webSocket.Client.Close += async(s, e) => { _keepAliveTimer.Dispose(); foreach (var _ in _listenKeys) { await _api.UserStreamCloseAsync(_.Key, _.Value, CancellationToken.None) .ConfigureAwait(false); } }; }
/// <summary> /// The DI constructor. /// </summary> /// <param name="api"></param> /// <param name="stream"></param> /// <param name="logger"></param> public BinanceWebSocketStreamController(IBinanceApi api, IWebSocketStream stream, ILogger <BinanceWebSocketStreamController> logger = null) : base(stream, logger) { Throw.IfNull(api, nameof(api)); _api = api; }
public WebSocket(IWebSocketStream stream, WebSocketFlags flags, IPAddress remoteIpAddress) : base(flags) { RemoteIpAddress = remoteIpAddress ?? throw new ArgumentNullException(nameof(remoteIpAddress)); m_stream = stream ?? throw new ArgumentNullException(nameof(stream)); WebSocketsEventSource.Log.CreateSocket(Id, flags, remoteIpAddress); }
/// <summary> /// Contstructor. /// </summary> /// <param name="webSocket"></param> /// <param name="onError"></param> public WebSocketStreamController(IWebSocketStream webSocket, Action <Exception> onError = null) : base(webSocket.StreamAsync, onError) { Throw.IfNull(webSocket, nameof(webSocket)); WebSocket = webSocket; }
/// <summary> /// Constructor. /// </summary> /// <param name="webSocket"></param> /// <param name="logger"></param> protected BinanceWebSocketClient(IWebSocketStream webSocket, ILogger logger = null) { Throw.IfNull(webSocket, nameof(webSocket)); WebSocket = webSocket; Logger = logger; Subscribers = new Dictionary <string, IList <Action <TEventArgs> > >(); }
internal override ValueTask WriteAsync(IWebSocketStream stream) { if (Buffer.IsSingleSegment) { return(stream.WriteAsync(Buffer.First)); } return(new ValueTask(WriteMultipleAsync(stream))); }
/// <summary> /// Constructor. /// </summary> /// <param name="webSocket"></param> /// <param name="logger"></param> public TradeWebSocketClient(IWebSocketStream webSocket, ILogger <TradeWebSocketClient> logger = null) : base(webSocket, logger) { }
/// <summary> /// Constructor. /// </summary> /// <param name="stream"></param> /// <param name="logger"></param> public AggregateTradeWebSocketClient(IWebSocketStream stream, ILogger <AggregateTradeWebSocketClient> logger = null) : base(stream, logger) { }
/// <summary> /// Wait until web socket is open. /// </summary> /// <param name="stream"></param> /// <param name="token"></param> /// <returns></returns> public static Task WaitUntilWebSocketOpenAsync(this IWebSocketStream stream, CancellationToken token = default) => stream.WebSocket.WaitUntilOpenAsync(token);
/// <summary> /// Constructor. /// </summary> /// <param name="webSocket"></param> /// <param name="logger"></param> public SymbolStatisticsWebSocketClient(IWebSocketStream webSocket, ILogger <SymbolStatisticsWebSocketClient> logger = null) : base(webSocket, logger) { }
protected WebSocketBase(Stream innerStream, string subProtocol, TimeSpan keepAliveInterval, WebSocketBuffer internalBuffer) { Contract.Assert(internalBuffer != null, "'internalBuffer' MUST NOT be NULL."); WebSocketHelpers.ValidateInnerStream(innerStream); WebSocketHelpers.ValidateOptions(subProtocol, internalBuffer.ReceiveBufferSize, internalBuffer.SendBufferSize, keepAliveInterval); s_LoggingEnabled = Logging.On && Logging.WebSockets.Switch.ShouldTrace(TraceEventType.Critical); string parameters = string.Empty; if (s_LoggingEnabled) { parameters = string.Format(CultureInfo.InvariantCulture, "ReceiveBufferSize: {0}, SendBufferSize: {1}, Protocols: {2}, KeepAliveInterval: {3}, innerStream: {4}, internalBuffer: {5}", internalBuffer.ReceiveBufferSize, internalBuffer.SendBufferSize, subProtocol, keepAliveInterval, Logging.GetObjectLogHash(innerStream), Logging.GetObjectLogHash(internalBuffer)); Logging.Enter(Logging.WebSockets, this, Methods.Initialize, parameters); } m_ThisLock = new object(); try { m_InnerStream = innerStream; m_InternalBuffer = internalBuffer; if (s_LoggingEnabled) { Logging.Associate(Logging.WebSockets, this, m_InnerStream); Logging.Associate(Logging.WebSockets, this, m_InternalBuffer); } m_CloseOutstandingOperationHelper = new OutstandingOperationHelper(); m_CloseOutputOutstandingOperationHelper = new OutstandingOperationHelper(); m_ReceiveOutstandingOperationHelper = new OutstandingOperationHelper(); m_SendOutstandingOperationHelper = new OutstandingOperationHelper(); m_State = WebSocketState.Open; m_SubProtocol = subProtocol; m_SendFrameThrottle = new SemaphoreSlim(1, 1); m_CloseStatus = null; m_CloseStatusDescription = null; m_InnerStreamAsWebSocketStream = innerStream as IWebSocketStream; if (m_InnerStreamAsWebSocketStream != null) { m_InnerStreamAsWebSocketStream.SwitchToOpaqueMode(this); } m_KeepAliveTracker = KeepAliveTracker.Create(keepAliveInterval); } finally { if (s_LoggingEnabled) { Logging.Exit(Logging.WebSockets, this, Methods.Initialize, parameters); } } }
public IRetryTaskController GetController(IWebSocketStream webSocket) => _controllers.ContainsKey(webSocket) ? _controllers[webSocket] : null;
public JsonStreamPublisherTest() { _webSocketStream = new BinanceWebSocketStream(DefaultWebSocketClientTest.CreateMockWebSocketClient(_json, _streamName)); _publisher = new MockJsonStreamPublisher(_webSocketStream); }
/// <summary> /// Constructor. /// </summary> /// <param name="client"></param> /// <param name="logger"></param> public CandlestickWebSocketClient(IWebSocketStream webSocket, ILogger <CandlestickWebSocketClient> logger = null) : base(webSocket, logger) { }
protected WebSocketBase(Stream innerStream, string subProtocol, TimeSpan keepAliveInterval, WebSocketBuffer internalBuffer) { Debug.Assert(internalBuffer != null, "'internalBuffer' MUST NOT be NULL."); WebSocketValidate.ValidateInnerStream(innerStream); WebSocketValidate.ValidateOptions(subProtocol, internalBuffer.ReceiveBufferSize, internalBuffer.SendBufferSize, keepAliveInterval); string parameters = string.Empty; if (NetEventSource.IsEnabled) { parameters = string.Format(CultureInfo.InvariantCulture, "ReceiveBufferSize: {0}, SendBufferSize: {1}, Protocols: {2}, KeepAliveInterval: {3}, innerStream: {4}, internalBuffer: {5}", internalBuffer.ReceiveBufferSize, internalBuffer.SendBufferSize, subProtocol, keepAliveInterval, NetEventSource.GetHashCode(innerStream), NetEventSource.GetHashCode(internalBuffer)); NetEventSource.Enter(this, parameters); } _thisLock = new object(); try { _innerStream = innerStream; _internalBuffer = internalBuffer; if (NetEventSource.IsEnabled) { NetEventSource.Associate(this, _innerStream); NetEventSource.Associate(this, _internalBuffer); } _closeOutstandingOperationHelper = new OutstandingOperationHelper(); _closeOutputOutstandingOperationHelper = new OutstandingOperationHelper(); _receiveOutstandingOperationHelper = new OutstandingOperationHelper(); _sendOutstandingOperationHelper = new OutstandingOperationHelper(); _state = WebSocketState.Open; _subProtocol = subProtocol; _sendFrameThrottle = new SemaphoreSlim(1, 1); _closeStatus = null; _closeStatusDescription = null; _innerStreamAsWebSocketStream = innerStream as IWebSocketStream; if (_innerStreamAsWebSocketStream != null) { _innerStreamAsWebSocketStream.SwitchToOpaqueMode(this); } _keepAliveTracker = KeepAliveTracker.Create(keepAliveInterval); } finally { if (NetEventSource.IsEnabled) { NetEventSource.Exit(this, parameters); } } }
internal override ValueTask WriteAsync(IWebSocketStream stream) => stream.WriteAsync(Buffer.First);
/// <summary> /// Constructor. /// </summary> /// <param name="stream"></param> /// <param name="logger"></param> public DepthWebSocketClient(IWebSocketStream stream, ILogger <DepthWebSocketClient> logger = null) : base(stream, logger) { }
/// <summary> /// Get flag indicating if using combined streams. /// </summary> /// <param name="webSocket"></param> /// <returns></returns> public static bool IsCombined(this IWebSocketStream webSocket) { return(webSocket is BinanceWebSocketStream binanceWebSocketStream && binanceWebSocketStream.IsCombined); }
/// <summary> /// Constructor. /// </summary> /// <param name="webSocket">The WebSocket stream.</param> /// <param name="logger">The logger.</param> protected UserDataWebSocketClient(IWebSocketStream webSocket, ILogger <UserDataWebSocketClient> logger = null) : base(webSocket, logger) { }