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); }
// ----------------------- 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); }
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 }); } }
// ----------------------- 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); }
// ------------------------- 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); }