public void Should_return_data_in_order() { string expected = "1234"; string data = ""; var bufferedConsumer = new BufferedConsumer(s => { data = s; }, exception => { }); bufferedConsumer.OnData(new ArraySegment<byte>(Encoding.UTF8.GetBytes("1")), () => { }); bufferedConsumer.OnData(new ArraySegment<byte>(Encoding.UTF8.GetBytes("2")), () => { }); bufferedConsumer.OnData(new ArraySegment<byte>(Encoding.UTF8.GetBytes("3")), () => { }); bufferedConsumer.OnData(new ArraySegment<byte>(Encoding.UTF8.GetBytes("4")), () => { }); bufferedConsumer.OnEnd(); Assert.That(data, Is.EqualTo(expected)); }
public void Should_return_data_in_order() { string expected = "1234"; string data = ""; var bufferedConsumer = new BufferedConsumer(s => { data = s; }, exception => { }); bufferedConsumer.OnData(new ArraySegment <byte>(Encoding.UTF8.GetBytes("1")), () => { }); bufferedConsumer.OnData(new ArraySegment <byte>(Encoding.UTF8.GetBytes("2")), () => { }); bufferedConsumer.OnData(new ArraySegment <byte>(Encoding.UTF8.GetBytes("3")), () => { }); bufferedConsumer.OnData(new ArraySegment <byte>(Encoding.UTF8.GetBytes("4")), () => { }); bufferedConsumer.OnEnd(); Assert.That(data, Is.EqualTo(expected)); }
/// <summary> /// IHttpRequestHandler.OnRequest internal handler /// </summary> internal void onRequest(HttpRequestHead head, IDataProducer body, IHttpResponseDelegate response) { RESTMethod method; if (Enum.TryParse<RESTMethod>(head.Method, out method)) { Pair<ResourceInstance, object[]> resourceParameterPair = retrieveResource(head.Path, method); ResourceInstance resource = resourceParameterPair.V1; object[] resourceParameters = resourceParameterPair.V2; if (resource != null) { ResourceMethod resourceMethod = resource.GetResourceMethod(method); if (resourceMethod != null) { if (resourceMethod.Parameters.Length == resourceParameters.Length + 1) { NameValueCollection getQuery = HttpUtility.ParseQueryString(head.QueryString ?? ""); // now, if it's a POST, read POST data then if (method == RESTMethod.POST) { var consumer = new BufferedConsumer(bufferedBody => { HttpMultipartParser.MultipartFormDataParser parser = new HttpMultipartParser.MultipartFormDataParser(new MemoryStream(Encoding.Default.GetBytes(bufferedBody))); NameValueCollection postQuery = new NameValueCollection(); foreach (var param in parser.Parameters) postQuery.Add(param.Key, param.Value.Data); Context invocationContext = new Context(new Request(head, postQuery, getQuery)); giveResponse(resourceMethod, invocationContext, response, resourceParameters); }, error => { _logger.Error("IDataProducer.Connect failed", error); }); body.Connect(consumer); } else { Context invocationContext = new Context(new Request(head, getParameters: getQuery)); giveResponse(resourceMethod, invocationContext, response, resourceParameters); } } else { Response notFoundResponse = Response.Error(HttpStatusCode.NotFound); response.OnResponse(notFoundResponse.Head, notFoundResponse.Body); } } else { Response notImplementedResponse = Response.Error(HttpStatusCode.NotImplemented); response.OnResponse(notImplementedResponse.Head, notImplementedResponse.Body); } } else { Response notFoundResponse = Response.Error(HttpStatusCode.NotFound); response.OnResponse(notFoundResponse.Head, notFoundResponse.Body); } } else { Response methodNotAllowedResponse = Response.Error(HttpStatusCode.MethodNotAllowed); response.OnResponse(methodNotAllowedResponse.Head, methodNotAllowedResponse.Body); } }
public void OnRequest(HttpRequestHead request, IDataProducer requestBody, IHttpResponseDelegate response) { var ea = new RequestReceivedEventArgs(); ea.RequestHead = request; ea.ResponseHead = ResponseMessageHelper.GetHttpResponseHead(); string contentType = string.Empty; if(ea.RequestHead.Headers.ContainsKey("Content-Type")) contentType=ea.RequestHead.Headers["Content-Type"]; int contentSize = 0; if(ea.RequestHead.Headers.ContainsKey("Content-Length")) { int.TryParse(ea.RequestHead.Headers["Content-Length"],out contentSize); } BufferedConsumer bc=new BufferedConsumer(bodyContents => { try { ea.RequestBody = bodyContents; //Called when request body is read to end if (RequestReceived != null) { RequestReceived(this, ea); } var bp = ea.ResponseBodyProducer as BufferedProducer; if (bp != null) { ea.ResponseHead.Headers["Content-Length"] = bp.GetContentLength().ToString(); } } finally { response.OnResponse(ea.ResponseHead, ea.ResponseBodyProducer); } }, error => { }, contentType,contentSize); //Gets complete HTTP Request and runs code defined over requestBody.Connect(bc); }