using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using ServiceStack; using ServiceStack.Web; using MediaBrowser.Controller.Net; namespace MediaBrowser.Server.Implementations.HttpServer { public class AsyncStreamWriter : IStreamWriter, IAsyncStreamWriter, IHasOptions { /// /// Gets or sets the source stream. /// /// The source stream. private IAsyncStreamSource _source; public Action OnComplete { get; set; } public Action OnError { get; set; } /// /// Initializes a new instance of the class. /// public AsyncStreamWriter(IAsyncStreamSource source) { _source = source; } public IDictionary Options { get { var hasOptions = _source as IHasOptions; if (hasOptions != null) { return hasOptions.Options; } return new Dictionary(StringComparer.OrdinalIgnoreCase); } } /// /// Writes to. /// /// The response stream. public void WriteTo(Stream responseStream) { var task = _source.WriteToAsync(responseStream); Task.WaitAll(task); } public async Task WriteToAsync(Stream responseStream) { await _source.WriteToAsync(responseStream).ConfigureAwait(false); } } }