public HttpResponseMessage ExecuteRequest(HttpRequestMessage request)
        {
            if (Verbose) Console.WriteLine("Received {0} - {1}", request.Method, request.RequestUri);

            var routeData = determineRouteData(request);

            if (routeData == null)
            {
                return write404();
            }
            else
            {
                try
                {
                    var response = new HttpResponseMessage(HttpStatusCode.OK);
                    var arguments = new SelfHostServiceArguments(routeData, request, response);
                    var invoker = routeData.RouteHandler.As<FubuRouteHandler>().Invoker;
                    var requestCompletion = new RequestCompletion();
                    requestCompletion.Start(() => invoker.Invoke(arguments, routeData.Values, requestCompletion));

                    arguments.Writer.AttachContent();

                    return response;
                }
                catch (Exception ex)
                {
                    return write500(ex);
                }
            }
        }
Example #2
0
        public Task Invoke(IDictionary<string, object> environment)
        {
            var owinHttpContext = new OwinHttpContext(environment);
            var routeData = _routes.GetRouteData(owinHttpContext);
            if (routeData == null)
            {
                write404(environment);
                return Task.Factory.StartNew(() => { });
            }

            new OwinRequestReader().Read(environment);

            var arguments = new OwinServiceArguments(routeData, environment);
            var invoker = routeData.RouteHandler.As<FubuRouteHandler>().Invoker;

            var taskCompletionSource = new TaskCompletionSource<object>();
            var requestCompletion = new RequestCompletion();
            requestCompletion.WhenCompleteDo(ex =>
            {
                if (ex != null)
                {
                    //This seems like OWIN should handle the .SetException(ex) with standard error screen formatting?
                    write500(environment, ex);
                }
                taskCompletionSource.SetResult(null);
            });
            arguments.With<IRequestCompletion>(requestCompletion);
            requestCompletion.SafeStart(() => invoker.Invoke(arguments, routeData.Values, requestCompletion));

            return taskCompletionSource.Task;
        }
Example #3
0
        public void Invoke(TypeArguments arguments)
        {
            var completion = new RequestCompletion();

            completion.SafeStart(() => {
                Invoke(arguments, new Dictionary <string, object>(), completion);
            });
        }
Example #4
0
        public void Invoke(ServiceArguments arguments)
        {
            var completion = new RequestCompletion();

            completion.SafeStart(() => {
                Invoke(arguments, new Dictionary<string, object>(), completion);
            });
        }
 public void Setup()
 {
     _completedCount = 0;
     _exception = null;
     _requestCompletion = new RequestCompletion();
     _requestCompletion.WhenCompleteDo(x =>
     {
         _exception = x;
         _completedCount++;
     });
 }