public Task Call(IDictionary <string, object> env) { CallCount += 1; Env = env; var tcs = new TaskCompletionSource <object>(); ResultCallback = () => { env["owin.ResponseStatusCode"] = ResponseStatus; env["owin.ResponseReasonPhrase"] = ResponseReasonPhrase; var headers = (IDictionary <string, string[]>)env["owin.ResponseHeaders"]; foreach (var kv in ResponseHeaders) { headers[kv.Key] = kv.Value; } var output = (Stream)env["owin.ResponseBody"]; ResponseBody .Subscribe(output) .CopyResultToCompletionSource(tcs, null); }; RequestHeaders = (IDictionary <string, string[]>)env["owin.RequestHeaders"]; RequestBody = new FakeRequestBody((Stream)env["owin.RequestBody"]); var task = TaskHelpers.Completed(); if (OptionReadRequestBody) { // read request body to nowhere, then call back result task = task.Then(() => RequestBody.Subscribe(CancellationToken.None)); } if (OptionCallResultImmediately) { task = task.Then(() => ResultCallback()); } task.CopyResultToCompletionSource(tcs, null); return(tcs.Task); }
public void Call(IDictionary<string, object> env, ResultDelegate result, Action<Exception> fault) { CallCount += 1; Env = env; ResultCallback = result; FaultCallback = fault; RequestHeaders = (IDictionary<string, IEnumerable<string>>)env["owin.RequestHeaders"]; RequestBody = new FakeRequestBody((BodyDelegate)env["owin.RequestBody"]); if (OptionCallResultImmediately) { if (OptionReadRequestBody) { // read request body to nowhere, then call back result RequestBody.Subscribe( _ => false, _ => false, _ => result(ResponseStatus, ResponseHeaders, ResponseBody.Subscribe), CancellationToken.None); } else if (OptionCallResultImmediately) { // just then call back result, request unconsumed result(ResponseStatus, ResponseHeaders, ResponseBody.Subscribe); } } else { if (OptionReadRequestBody) { // read request body to nowhere, and leave everything hanging RequestBody.Subscribe( _ => false, _ => false, _ => { }, CancellationToken.None); } } }
public Task Call(IDictionary<string, object> env) { CallCount += 1; Env = env; var tcs = new TaskCompletionSource<object>(); ResultCallback = () => { env["owin.ResponseStatusCode"] = ResponseStatus; env["owin.ResponseReasonPhrase"] = ResponseReasonPhrase; var headers = (IDictionary<string, string[]>)env["owin.ResponseHeaders"]; foreach (var kv in ResponseHeaders) { headers[kv.Key] = kv.Value; } var output = (Stream)env["owin.ResponseBody"]; ResponseBody .Subscribe(output) .CopyResultToCompletionSource(tcs, null); }; RequestHeaders = (IDictionary<string, string[]>)env["owin.RequestHeaders"]; RequestBody = new FakeRequestBody((Stream)env["owin.RequestBody"]); var task = TaskHelpers.Completed(); if (OptionReadRequestBody) { // read request body to nowhere, then call back result task = task.Then(() => RequestBody.Subscribe(CancellationToken.None)); } if (OptionCallResultImmediately) { task = task.Then(() => ResultCallback()); } task.CopyResultToCompletionSource(tcs, null); return tcs.Task; }