diff options
Diffstat (limited to 'Emby.Server.Implementations/Services/HttpResult.cs')
| -rw-r--r-- | Emby.Server.Implementations/Services/HttpResult.cs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Emby.Server.Implementations/Services/HttpResult.cs b/Emby.Server.Implementations/Services/HttpResult.cs new file mode 100644 index 000000000..dfad09f7b --- /dev/null +++ b/Emby.Server.Implementations/Services/HttpResult.cs @@ -0,0 +1,58 @@ +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Model.Services; + +namespace Emby.Server.Implementations.Services +{ + public class HttpResult + : IHttpResult, IAsyncStreamWriter + { + public object Response { get; set; } + + public HttpResult(object response, string contentType, HttpStatusCode statusCode) + { + this.Headers = new Dictionary<string, string>(); + this.Cookies = new List<Cookie>(); + + this.Response = response; + this.ContentType = contentType; + this.StatusCode = statusCode; + } + + public string ContentType { get; set; } + + public IDictionary<string, string> Headers { get; private set; } + + public List<Cookie> Cookies { get; private set; } + + public int Status { get; set; } + + public HttpStatusCode StatusCode + { + get { return (HttpStatusCode)Status; } + set { Status = (int)value; } + } + + public IRequest RequestContext { get; set; } + + public async Task WriteToAsync(Stream responseStream, CancellationToken cancellationToken) + { + var response = RequestContext != null ? RequestContext.Response : null; + + var bytesResponse = this.Response as byte[]; + if (bytesResponse != null) + { + if (response != null) + response.SetContentLength(bytesResponse.Length); + + await responseStream.WriteAsync(bytesResponse, 0, bytesResponse.Length).ConfigureAwait(false); + return; + } + + await ResponseHelper.WriteObject(this.RequestContext, this.Response, response).ConfigureAwait(false); + } + } +} |
