diff options
Diffstat (limited to 'MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs')
| -rw-r--r-- | MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs | 224 |
1 files changed, 134 insertions, 90 deletions
diff --git a/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs b/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs index 53b3ee817..293cb6e98 100644 --- a/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs +++ b/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs @@ -1,90 +1,134 @@ -using MediaBrowser.Common.Serialization;
-using System;
-using System.IO;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Common.Net.Handlers
-{
- public abstract class BaseSerializationHandler<T> : BaseHandler
- where T : class
- {
- public SerializationFormat SerializationFormat
- {
- get
- {
- string format = QueryString["dataformat"];
-
- if (string.IsNullOrEmpty(format))
- {
- return SerializationFormat.Json;
- }
-
- return (SerializationFormat)Enum.Parse(typeof(SerializationFormat), format, true);
- }
- }
-
- protected string ContentType
- {
- get
- {
- switch (SerializationFormat)
- {
- case SerializationFormat.Jsv:
- return "text/plain";
- case SerializationFormat.Protobuf:
- return "application/x-protobuf";
- default:
- return MimeTypes.JsonMimeType;
- }
- }
- }
-
- protected override async Task<ResponseInfo> GetResponseInfo()
- {
- ResponseInfo info = new ResponseInfo
- {
- ContentType = ContentType
- };
-
- _objectToSerialize = await GetObjectToSerialize().ConfigureAwait(false);
-
- if (_objectToSerialize == null)
- {
- info.StatusCode = 404;
- }
-
- return info;
- }
-
- private T _objectToSerialize;
-
- protected abstract Task<T> GetObjectToSerialize();
-
- protected override Task WriteResponseToOutputStream(Stream stream)
- {
- return Task.Run(() =>
- {
- switch (SerializationFormat)
- {
- case SerializationFormat.Jsv:
- JsvSerializer.SerializeToStream(_objectToSerialize, stream);
- break;
- case SerializationFormat.Protobuf:
- ProtobufSerializer.SerializeToStream(_objectToSerialize, stream);
- break;
- default:
- JsonSerializer.SerializeToStream(_objectToSerialize, stream);
- break;
- }
- });
- }
- }
-
- public enum SerializationFormat
- {
- Json,
- Jsv,
- Protobuf
- }
-
-}
+using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Serialization; +using System; +using System.IO; +using System.Threading.Tasks; + +namespace MediaBrowser.Common.Net.Handlers +{ + /// <summary> + /// Class BaseSerializationHandler + /// </summary> + /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam> + /// <typeparam name="T"></typeparam> + public abstract class BaseSerializationHandler<TKernelType, T> : BaseHandler<TKernelType> + where TKernelType : IKernel + where T : class + { + /// <summary> + /// Gets the serialization format. + /// </summary> + /// <value>The serialization format.</value> + public SerializationFormat SerializationFormat + { + get + { + var format = QueryString["dataformat"]; + + if (string.IsNullOrEmpty(format)) + { + return SerializationFormat.Json; + } + + return (SerializationFormat)Enum.Parse(typeof(SerializationFormat), format, true); + } + } + + /// <summary> + /// Gets the type of the content. + /// </summary> + /// <value>The type of the content.</value> + protected string ContentType + { + get + { + switch (SerializationFormat) + { + case SerializationFormat.Protobuf: + return "application/x-protobuf"; + default: + return MimeTypes.JsonMimeType; + } + } + } + + /// <summary> + /// Gets the response info. + /// </summary> + /// <returns>Task{ResponseInfo}.</returns> + protected override Task<ResponseInfo> GetResponseInfo() + { + return Task.FromResult(new ResponseInfo + { + ContentType = ContentType + }); + } + + /// <summary> + /// Called when [processing request]. + /// </summary> + /// <param name="responseInfo">The response info.</param> + /// <returns>Task.</returns> + protected override async Task OnProcessingRequest(ResponseInfo responseInfo) + { + _objectToSerialize = await GetObjectToSerialize().ConfigureAwait(false); + + if (_objectToSerialize == null) + { + throw new ResourceNotFoundException(); + } + + await base.OnProcessingRequest(responseInfo).ConfigureAwait(false); + } + + /// <summary> + /// The _object to serialize + /// </summary> + private T _objectToSerialize; + + /// <summary> + /// Gets the object to serialize. + /// </summary> + /// <returns>Task{`0}.</returns> + protected abstract Task<T> GetObjectToSerialize(); + + /// <summary> + /// Writes the response to output stream. + /// </summary> + /// <param name="stream">The stream.</param> + /// <param name="responseInfo">The response info.</param> + /// <param name="contentLength">Length of the content.</param> + /// <returns>Task.</returns> + protected override Task WriteResponseToOutputStream(Stream stream, ResponseInfo responseInfo, long? contentLength) + { + return Task.Run(() => + { + switch (SerializationFormat) + { + case SerializationFormat.Protobuf: + Kernel.ProtobufSerializer.SerializeToStream(_objectToSerialize, stream); + break; + default: + JsonSerializer.SerializeToStream(_objectToSerialize, stream); + break; + } + }); + } + } + + /// <summary> + /// Enum SerializationFormat + /// </summary> + public enum SerializationFormat + { + /// <summary> + /// The json + /// </summary> + Json, + /// <summary> + /// The protobuf + /// </summary> + Protobuf + } +} |
