public void Get(string url, Action <HttpContentModel> callback, MetaModel meta = null) { var model = new HttpContentModel(this.CreateGetRequest(url), callback, meta); try { tasksQueue.Push(model); this.Run(); } catch (Exception e) { ProcessException(null, e, model).ContinueWith(r => { }); } }
public void Post(string url, string data, Action <HttpContentModel> callback, string contentType = "application/json", MetaModel meta = null) { //var r = await this.client.PostAsync(url, httpContent); var model = new HttpContentModel(null, callback, meta); try { model.request = this.CreatePostRequest(url, data, contentType); tasksQueue.Push(model); this.Run(); } catch (Exception e) { ProcessException(null, e, model).ContinueWith(r => { }); } }
private async Task <bool> ProcessException(BaseHttpClient client, Exception e, HttpContentModel model) { var exceptionPip = exceptionPipelines.ToArray(); foreach (var pipeline in exceptionPip) { var rpip = pipeline.Invoke(client, e, model.request, model.response, model.meta); if (rpip is Exception) { e = rpip as Exception; continue; } else if (rpip is RequestEntity) { model.request = rpip as RequestEntity; return(await this.Send(client, model, model.callback)); } else if (rpip is ResponseEntity) { var resp = rpip as ResponseEntity; model.response = resp; model.callback.Invoke(model); return(resp.StatusCode == 200); } } return(false); }
private async Task <bool> Send(BaseHttpClient client, HttpContentModel model, Action <HttpContentModel> callback) { try { var _requestPip = requestPipelines.ToArray(); foreach (var pipeline in _requestPip) { var _request = pipeline.Invoke(client, model.request, model.meta); model.request = _request is RequestEntity ? _request as RequestEntity : null; if (model.request == null) { break; } } if (model.request == null) { //freeClientsQueue.Push(client); return(false); } ResponseEntity r = null; if (client == null) { #if DEBUG Console.WriteLine("HttpClient is null"); #endif return(false); } r = await client.CreateHttpRequestSend(model); //针对StatusCode 做异常处理 if (this.CatchHttpCode.Contains(r.StatusCode)) { model.response = r; throw new CatchHttpCodeException(r.StatusCode); } Func <BaseHttpClient, RequestEntity, ResponseEntity, MetaModel, object>[] _responsePip = responsePipelines.ToArray(); foreach (var pipeline in _responsePip) { var rpip = pipeline.Invoke(client, model.request, r, model.meta); if (rpip is RequestEntity) { model.request = rpip as RequestEntity; return(await this.Send(client, model, callback)); } else if (rpip is null) { //freeClientsQueue.Push(client); return(false); } } model.response = r; callback.Invoke(model); //freeClientsQueue.Push(client);//放在此处添加队列,解析过程也在线程限制数里 return(r.StatusCode == 200); } catch (Exception e) { Console.WriteLine(e.Message); return(await ProcessException(client, e, model)); } finally { freeClientsQueue.Push(client);//放在此处添加队列,解析过程也在线程限制数里 } }