/// <summary> /// Update web socket stream URI when published streams change. /// </summary> protected override void OnPublishedStreamsChanged() { Stream.Uri = BinanceWebSocketStream.CreateUri(PublishedStreams.ToArray()); // Call base class to handle automatic streaming. base.OnPublishedStreamsChanged(); }
private void HandleAutomaticStreaming() { lock (_sync) { if (!_task.IsCompleted) { return; } Logger?.LogDebug($"{GetType().Name}.{nameof(HandleAutomaticStreaming)}: Delayed automatic stream control... [thread: {Thread.CurrentThread.ManagedThreadId}]"); _task = Task.Delay(250).ContinueWith(async _ => { try { if (!Stream.IsStreaming && PublishedStreams.Any()) { Logger?.LogDebug($"{GetType().Name}.{nameof(HandleAutomaticStreaming)}: Begin... [thread: {Thread.CurrentThread.ManagedThreadId}]"); Controller.Begin(); } else if (Stream.IsStreaming && !PublishedStreams.Any()) { Logger?.LogDebug($"{GetType().Name}.{nameof(HandleAutomaticStreaming)}: Cancel... [thread: {Thread.CurrentThread.ManagedThreadId}]"); await Controller.CancelAsync() .ConfigureAwait(false); } } catch (Exception e) { Logger?.LogError(e, $"{GetType().Name}: Automatic stream control failed. [thread: {Thread.CurrentThread.ManagedThreadId}]"); } }); } }