aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs')
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs60
1 files changed, 49 insertions, 11 deletions
diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
index 643d0c956..4218370ac 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
@@ -28,6 +28,7 @@ using MediaBrowser.Model.Net;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
using MediaBrowser.Model.Text;
+using ServiceStack.Text.Jsv;
using SocketHttpListener.Net;
using SocketHttpListener.Primitives;
@@ -87,9 +88,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
public override void Configure()
{
- HostConfig.Instance.DefaultRedirectPath = DefaultRedirectPath;
-
- HostConfig.Instance.MapExceptionToStatusCode = new Dictionary<Type, int>
+ var mapExceptionToStatusCode = new Dictionary<Type, int>
{
{typeof (InvalidOperationException), 500},
{typeof (NotImplementedException), 500},
@@ -126,21 +125,24 @@ namespace MediaBrowser.Server.Implementations.HttpServer
return _appHost.Resolve<T>();
}
- public override T TryResolve<T>()
+ public override Type[] GetGenericArguments(Type type)
{
- return _appHost.TryResolve<T>();
+ return type.GetGenericArguments();
}
- public override object CreateInstance(Type type)
+ public override bool IsAssignableFrom(Type type1, Type type2)
{
- return _appHost.CreateInstance(type);
+ return type1.IsAssignableFrom(type2);
}
- public override void OnConfigLoad()
+ public override T TryResolve<T>()
{
- base.OnConfigLoad();
+ return _appHost.TryResolve<T>();
+ }
- Config.HandlerFactoryPath = null;
+ public override object CreateInstance(Type type)
+ {
+ return _appHost.CreateInstance(type);
}
protected override ServiceController CreateServiceController(params Assembly[] assembliesWithServices)
@@ -156,12 +158,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer
return this;
}
+ public static string HandlerFactoryPath;
+
/// <summary>
/// Starts the Web Service
/// </summary>
private void StartListener()
{
- HostContext.Config.HandlerFactoryPath = GetHandlerPathIfAny(UrlPrefixes.First());
+ HandlerFactoryPath = GetHandlerPathIfAny(UrlPrefixes.First());
_listener = GetListener();
@@ -610,6 +614,40 @@ namespace MediaBrowser.Server.Implementations.HttpServer
return routes.ToArray();
}
+ public override object GetTaskResult(Task task, string requestName)
+ {
+ try
+ {
+ var taskObject = task as Task<object>;
+ if (taskObject != null)
+ {
+ return taskObject.Result;
+ }
+
+ task.Wait();
+
+ var type = task.GetType();
+ if (!type.IsGenericType)
+ {
+ return null;
+ }
+
+ Logger.Warn("Getting task result from " + requestName + " using reflection. For better performance have your api return Task<object>");
+ return type.GetProperty("Result").GetValue(task);
+ }
+ catch (TypeAccessException)
+ {
+ return null; //return null for void Task's
+ }
+ }
+
+ public override Func<string, object> GetParseFn(Type propertyType)
+ {
+ var fn = JsvReader.GetParseFn(propertyType);
+
+ return s => fn(s);
+ }
+
public override void SerializeToJson(object o, Stream stream)
{
_jsonSerializer.SerializeToStream(o, stream);