示例#1
0
        public void OnRequest(HttpRequestHead head, IDataProducer body, IHttpResponseDelegate response)
        {
            var env = new Dictionary<string, object>();
            var request = new RequestEnvironment(env);

            if (context != null)
                foreach (var kv in context)
                    env[kv.Key] = kv.Value;

            if (head.Headers == null)
                request.Headers = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase);
            else
                request.Headers = head.Headers.ToDictionary(kv => kv.Key, kv => new[] { kv.Value }, StringComparer.OrdinalIgnoreCase);

            request.Method = head.Method ?? "";
            request.Path = head.Path ?? "";
            request.PathBase = "";
            request.QueryString = head.QueryString ?? "";
            request.Scheme = "http"; // XXX
            request.Version = "1.0";

            if (body == null)
                request.BodyDelegate = null;
            else
                request.BodyDelegate = (write, end, cancellationToken) =>
                {
                    var d = body.Connect(new DataConsumer(
                        write,
                        end,
                        () => end(null)));
                    cancellationToken.Register(d.Dispose);
                };

            appDelegate(env, HandleResponse(response), HandleError(response));
        }
示例#2
0
        public void Invoke(CallParameters call, Action<ResultParameters, Exception> callback)
        {
            var request = new RequestEnvironment(call.Environment);
            var theScheduler = scheduler ?? request.Scheduler;

            var oldBody = call.Body;

            if (oldBody != null)
            {
                call.Body = RescheduleBody(theScheduler, call.Body);
            }

            wrapped(
                call,
                (result, error) =>
                    theScheduler.Post(() =>
                    {
                        result.Body = RescheduleBody(theScheduler, result.Body);
                        callback(result, error);
                    }));

            //            result(status, headers, RescheduleBody(theScheduler, body))),
            //    e =>
            //        theScheduler.Post(() =>
            //            error(e)));
        }
示例#3
0
        public object GetRequestEnvironmentValue(string key)
        {
            object value = null;

            if (RequestEnvironment != null &&
                RequestEnvironment.ContainsKey(key))
            {
                value = RequestEnvironment[key];
            }
            return(value);
        }
示例#4
0
        public void Invoke(IDictionary<string, object> env, ResultDelegate result, Action<Exception> error)
        {
            var request = new RequestEnvironment(env);
            var theScheduler = scheduler ?? request.Scheduler;

            var oldBody = request.BodyDelegate;

            if (oldBody != null)
            {
                request.BodyDelegate = RescheduleBody(theScheduler, request.BodyDelegate);
            }
            wrapped(
                env,
                (status, headers, body) =>
                    theScheduler.Post(() =>
                        result(status, headers, RescheduleBody(theScheduler, body))),
                e =>
                    theScheduler.Post(() =>
                        error(e)));
        }
示例#5
0
        public void OnRequest(HttpRequestHead head, IDataProducer body, IHttpResponseDelegate response)
        {
            var env = new Dictionary<string, object>();
            var request = new RequestEnvironment(env);

            if (context != null)
                foreach (var kv in context)
                    env[kv.Key] = kv.Value;

            if (head.Headers == null)
                env[OwinConstants.RequestHeaders] = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase);
            else
                env[OwinConstants.RequestHeaders] = head.Headers.ToDictionary(kv => kv.Key, kv => new[] { kv.Value }, StringComparer.OrdinalIgnoreCase);

            env[OwinConstants.ResponseHeaders] = new Dictionary<string, string[]>(StringComparer.OrdinalIgnoreCase);

            request.Method = head.Method ?? "";
            request.Path = head.Path ?? "";
            request.PathBase = "";
            request.QueryString = head.QueryString ?? "";
            request.Scheme = "http"; // XXX
            request.Version = "1.0";

            if (body == null)
                env[OwinConstants.RequestBody] = Stream.Null;
                /*
            else
                request.Body = (write, end, cancellationToken) =>
                {
                    var d = body.Connect(new DataConsumer(
                        write,
                        end,
                        () => end(null)));
                    cancellationToken.Register(d.Dispose);
                };
                 */ // TODO: Request body stream

            appFunc(env)
                .Then(() => HandleResponse(response, env))
                .Catch(errorInfo => HandleError(response, errorInfo));
        }