aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/HttpServer/AsyncStreamWriter.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2016-08-15 17:59:28 -0400
committerGitHub <noreply@github.com>2016-08-15 17:59:28 -0400
commit02a4b90f65bdee74e65cd0549e4ad691c8e1eea8 (patch)
tree7b7e42a40f4289845804b3036a5454499e175655 /MediaBrowser.Server.Implementations/HttpServer/AsyncStreamWriter.cs
parent6186e3a4ff6614552e008d93add8fdcd744ae018 (diff)
parent7d16988b1b81cc73608c07d61eabb83f8fcbbb05 (diff)
Merge pull request #2025 from softworkz/AsyncStreamInterface
Async stream handling: Use interface instead of Func<Stream,Task>
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer/AsyncStreamWriter.cs')
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/AsyncStreamWriter.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/HttpServer/AsyncStreamWriter.cs b/MediaBrowser.Server.Implementations/HttpServer/AsyncStreamWriter.cs
new file mode 100644
index 000000000..e44b0c6af
--- /dev/null
+++ b/MediaBrowser.Server.Implementations/HttpServer/AsyncStreamWriter.cs
@@ -0,0 +1,59 @@
+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
+ {
+ /// <summary>
+ /// Gets or sets the source stream.
+ /// </summary>
+ /// <value>The source stream.</value>
+ private IAsyncStreamSource _source;
+
+ public Action OnComplete { get; set; }
+ public Action OnError { get; set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="AsyncStreamWriter" /> class.
+ /// </summary>
+ public AsyncStreamWriter(IAsyncStreamSource source)
+ {
+ _source = source;
+ }
+
+ public IDictionary<string, string> Options
+ {
+ get
+ {
+ var hasOptions = _source as IHasOptions;
+ if (hasOptions != null)
+ {
+ return hasOptions.Options;
+ }
+
+ return new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+ }
+ }
+
+ /// <summary>
+ /// Writes to.
+ /// </summary>
+ /// <param name="responseStream">The response stream.</param>
+ 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);
+ }
+ }
+}