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)); }
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))); }
public object GetRequestEnvironmentValue(string key) { object value = null; if (RequestEnvironment != null && RequestEnvironment.ContainsKey(key)) { value = RequestEnvironment[key]; } return(value); }
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))); }
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)); }