Пример #1
0
        internal ManualAsyncResult RequestPostAsync(Action <ResponseAccessor <string> > callback, ManualAsyncResult result)
        {
            try
            {
                result.HttpWebRequest.BeginGetRequestStream(result.WrapHandler(ar =>
                {
                    try
                    {
                        var stream = result.HttpWebRequest.EndGetRequestStream(ar);

                        stream.Write(result.Bytes, 0, result.Bytes.Length);

                        result.HttpWebRequest.BeginGetResponse(result.WrapHandler(ar2 =>
                        {
                            try
                            {
                                var responseStream = result.HttpWebRequest.EndGetResponse(ar2);

                                using (var response = responseStream.GetResponseStream())
                                {
                                    ReadStream(callback, result, response, 0);
                                }
                            }
                            catch (Exception ex)
                            {
                                callback(new ResponseAccessor <string>()
                                {
                                    Ex = ex
                                });
                            }
                        }), null);
                    }
                    catch (Exception ex)
                    {
                        result.Error = ex;

                        if (Con.AutoHost)
                        {
                            result.AsyncRequestRetryHandler.RetryAsyncRequest();
                        }
                    }
                }), null);
            }
            catch (Exception ex)
            {
                result.Error = ex;

                if (Con.AutoHost)
                {
                    result.AsyncRequestRetryHandler.RetryAsyncRequest();
                }
            }

            return(result);
        }
Пример #2
0
        // ----------------------- post ---------------------- //

        internal ManualAsyncResult RequestPost(ManualAsyncResult result)
        {
            try
            {
                result.HttpWebRequest.BeginGetRequestStream(result.WrapHandler(ar =>
                {
                    try
                    {
                        var stream = result.HttpWebRequest.EndGetRequestStream(ar);

                        stream.Write(result.Bytes, 0, result.Bytes.Length);
                    }
                    catch (Exception ex)
                    {
                        result.Error = ex;
                    }
                }), null);
            }
            catch (Exception ex)
            {
                result.Error = ex;
            }

            return(result);
        }
Пример #3
0
        private ResponseAccessor <TReturnType> EndPostRequest <TReturnType>(ManualAsyncResult result)
        {
            try
            {
                result.TimeOutWait();

                if (result.Error != null)
                {
                    if (Con.AutoHost)
                    {
                        result = result.RequestRetryHandler.RetryRequest();
                    }
                }

                Stream responseStream = null;

                var temp = new ManualAsyncResult();

                result.HttpWebRequest.BeginGetResponse(temp.WrapHandler(ar =>
                {
                    try
                    {
                        var response = result.HttpWebRequest.EndGetResponse(ar);

                        responseStream = response.GetResponseStream();
                    }
                    catch (Exception ex)
                    {
                        result.Error = ex;
                    }
                }), null);

                temp.TimeOutWait();

                if (result.Error != null)
                {
                    return(new ResponseAccessor <TReturnType>()
                    {
                        Ex = result.Error
                    });
                }

                var responseAccessor = ReadStream(result, responseStream, 0);

                return(new ResponseAccessor <TReturnType>()
                {
                    Content = JsonConvert.DeserializeObject <TReturnType>(responseAccessor.Content),
                });
            }
            catch (Exception ex)
            {
                return(new ResponseAccessor <TReturnType>()
                {
                    Ex = ex
                });
            }
        }
Пример #4
0
        // ----------------------- get ----------------------- //

        internal ManualAsyncResult RequestGet(ManualAsyncResult result)
        {
            try
            {
                result.HttpWebRequest.BeginGetResponse(result.WrapHandler(ar =>
                {
                    result.Response = result.HttpWebRequest.EndGetResponse(ar);
                }), null);
            }

            catch (Exception ex)
            {
                result.Error = ex;
            }

            return(result);
        }
Пример #5
0
        // ------------------------- read -----------------------//

        private ResponseAccessor <string> ReadStream(ManualAsyncResult result, Stream stream, int len)
        {
            var done = false;

            var buffer = new byte[20000];

            var response = new ResponseAccessor <string>();

            do
            {
                try
                {
                    var innerResult = new ManualAsyncResult();

                    stream.BeginRead(buffer, len, 20000, result.WrapHandler(innerResult.WrapHandler(ar =>
                    {
                        try
                        {
                            var readLen = stream.EndRead(ar);

                            if (readLen == 0)
                            {
                                stream.Close();

                                done = true;

                                response = new ResponseAccessor <string>
                                {
                                    Content = Encoding.UTF8.GetString(buffer, 0, len)
                                };

                                innerResult.m_waitHandle.Set();
                                return;
                            }

                            var temp = buffer;

                            Array.Resize(ref temp, buffer.Length + readLen);

                            buffer = temp;

                            len += readLen;
                        }
                        catch (Exception ex)
                        {
                            done = true;

                            response = new ResponseAccessor <string>
                            {
                                Ex = ex
                            };

                            innerResult.m_waitHandle.Set();

                            stream?.Close();
                        }
                    })), null);

                    innerResult.AsyncWaitHandle.WaitOne();
                }
                catch (Exception ex)
                {
                    response = new ResponseAccessor <string>
                    {
                        Ex = ex
                    };

                    done = true;
                }
            } while (!done);

            return(response);
        }