Пример #1
0
        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;
            };
        }
Пример #2
0
        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);
            }
        }