diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs | 60 |
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); |
