diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-11-03 19:35:19 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-11-03 19:35:19 -0400 |
| commit | d5ea8ca3ad378fc7e0a18ad314e1dfce07003ab6 (patch) | |
| tree | 4742a665e3455389a9795ff8b6c292263b3876e8 /MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs | |
| parent | d0babf322dad6624ee15622d11db52e58db5197f (diff) | |
move classes to portable
Diffstat (limited to 'MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs deleted file mode 100644 index c1566b900..000000000 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/QueueStream.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Model.Logging; - -namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts -{ - public class QueueStream - { - private readonly Stream _outputStream; - private readonly ConcurrentQueue<byte[]> _queue = new ConcurrentQueue<byte[]>(); - private CancellationToken _cancellationToken; - public TaskCompletionSource<bool> TaskCompletion { get; private set; } - - public Action<QueueStream> OnFinished { get; set; } - private readonly ILogger _logger; - - public QueueStream(Stream outputStream, ILogger logger) - { - _outputStream = outputStream; - _logger = logger; - TaskCompletion = new TaskCompletionSource<bool>(); - } - - public void Queue(byte[] bytes) - { - _queue.Enqueue(bytes); - } - - public void Start(CancellationToken cancellationToken) - { - _cancellationToken = cancellationToken; - Task.Run(() => StartInternal()); - } - - private byte[] Dequeue() - { - byte[] bytes; - if (_queue.TryDequeue(out bytes)) - { - return bytes; - } - - return null; - } - - private async Task StartInternal() - { - var cancellationToken = _cancellationToken; - - try - { - while (!cancellationToken.IsCancellationRequested) - { - var bytes = Dequeue(); - if (bytes != null) - { - await _outputStream.WriteAsync(bytes, 0, bytes.Length, cancellationToken).ConfigureAwait(false); - } - else - { - await Task.Delay(50, cancellationToken).ConfigureAwait(false); - } - } - - TaskCompletion.TrySetResult(true); - _logger.Debug("QueueStream complete"); - } - catch (OperationCanceledException) - { - _logger.Debug("QueueStream cancelled"); - TaskCompletion.TrySetCanceled(); - } - catch (Exception ex) - { - _logger.ErrorException("Error in QueueStream", ex); - TaskCompletion.TrySetException(ex); - } - finally - { - if (OnFinished != null) - { - OnFinished(this); - } - } - } - } -} |
