private static Func<ArraySegment<byte>, Action, bool> GetRequestBodyBuilder(UWebRequestParameters parameters, Action<Exception> errorCallback) { return (data, continuation) => { if (continuation == null) { parameters.Body.Write(data.Array, data.Offset, data.Count); return false; } var asyncState = new AsyncBuilderState(parameters.Body, continuation, errorCallback); parameters.Body.BeginWrite( data.Array, data.Offset, data.Count, ar => { var state = (AsyncBuilderState)ar.AsyncState; try { state.Stream.EndWrite(ar); state.OnComplete(); } catch (Exception e) { state.OnError(e); } }, asyncState); return true; }; }
private void InvokeUWeb(UWebRequestParameters parameters, ResponseCallBack responseCallBack, Action<Exception> errorCallback) { try { parameters.Body.Seek(0, SeekOrigin.Begin); var request = new Request(parameters.Method, parameters.Url, httpUtility, parameters.Body, parameters.Headers); engine.HandleRequest( request, response => { var returnCode = GetReturnCode(response); var headers = response.Headers; foreach (var cookie in response.Cookies) { headers.Add("Set-Cookie", cookie.ToEncodedString(httpUtility)); } headers.Add("Content-Type", response.ContentType.ToString()); responseCallBack(returnCode, headers, GetResponseBodyBuilder(response)); }, errorCallback); } catch (Exception e) { errorCallback.Invoke(e); } }