StreamWriter.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using MediaBrowser.Model.Logging;
  2. using ServiceStack.Service;
  3. using System;
  4. using System.IO;
  5. using System.Threading.Tasks;
  6. namespace MediaBrowser.Server.Implementations.HttpServer
  7. {
  8. /// <summary>
  9. /// Class StreamWriter
  10. /// </summary>
  11. public class StreamWriter : IStreamWriter
  12. {
  13. private ILogger Logger { get; set; }
  14. /// <summary>
  15. /// Gets or sets the source stream.
  16. /// </summary>
  17. /// <value>The source stream.</value>
  18. public Stream SourceStream { get; set; }
  19. /// <summary>
  20. /// Initializes a new instance of the <see cref="StreamWriter" /> class.
  21. /// </summary>
  22. /// <param name="source">The source.</param>
  23. /// <param name="logger">The logger.</param>
  24. public StreamWriter(Stream source, ILogger logger)
  25. {
  26. SourceStream = source;
  27. Logger = logger;
  28. }
  29. /// <summary>
  30. /// Writes to.
  31. /// </summary>
  32. /// <param name="responseStream">The response stream.</param>
  33. public void WriteTo(Stream responseStream)
  34. {
  35. var task = WriteToAsync(responseStream);
  36. Task.WaitAll(task);
  37. }
  38. /// <summary>
  39. /// Writes to async.
  40. /// </summary>
  41. /// <param name="responseStream">The response stream.</param>
  42. /// <returns>Task.</returns>
  43. private async Task WriteToAsync(Stream responseStream)
  44. {
  45. try
  46. {
  47. using (var src = SourceStream)
  48. {
  49. await src.CopyToAsync(responseStream).ConfigureAwait(false);
  50. }
  51. }
  52. catch (Exception ex)
  53. {
  54. Logger.ErrorException("Error streaming media", ex);
  55. throw;
  56. }
  57. }
  58. }
  59. }