public async Task<bool> ReceiveAndProcessNextEnvelopesAsync(Guid costCentreApplicationId) { List<Guid> batchIds = _configRepository.GetDeliveredCommandEnvelopeIds(); if (batchIds == null) { batchIds = new List<Guid>(); batchIds.Add(Guid.Empty); } EnvelopeRoutingRequest request= new EnvelopeRoutingRequest(); request.BatchSize = 10; request.CostCentreApplicationId = costCentreApplicationId; request.DeliveredEnvelopeIds = batchIds; BatchDocumentCommandEnvelopeRoutingResponse response = await _webApiProxy.GetNextCommandEnvelopesAsync(request); ; if (response == null) return false; _configRepository.ClearDeliveredCommandEnvelopeIds(); if (response.Envelopes.Count == 0) { return true; } foreach (CommandEnvelopeWrapper envelopeWrapper in response.Envelopes.OrderBy(s=>s.EnvelopeArrivedAtServerTick)) { try { _incomingCommandHandler.HandleCommandEnvelope(envelopeWrapper.Envelope); } catch (Exception ex) { string error = ex.AllMessages(); break; } } if (response.Envelopes.Count != 0) { return await ReceiveAndProcessNextEnvelopesAsync(costCentreApplicationId); } return true; }
public HttpResponseMessage GetNextDocumentCommandEnvelopes(EnvelopeRoutingRequest request) { string pullType = "Inventory"; _log.InfoFormat("GetNextDocumentCommandEnvelopes from CCAPPId : {0} with batchSize : {1}", request.CostCentreApplicationId, request.BatchSize); Guid ccid = _costCentreApplicationService.GetCostCentreFromCostCentreApplicationId(request.CostCentreApplicationId); BatchDocumentCommandEnvelopeRoutingResponse response = null; List<Guid> lastBatchEnvelopesIds = request.DeliveredEnvelopeIds; try { if (_costCentreApplicationService.IsCostCentreActive(request.CostCentreApplicationId)) { response = _commandEnvelopeRouterResponseBuilder.GetNextInventoryCommandEnvelopes(request.CostCentreApplicationId, ccid, lastBatchEnvelopesIds, request.BatchSize); if (response.Envelopes.Count == 0) { pullType = "Other"; response=_commandEnvelopeRouterResponseBuilder.GetNextCommandEnvelopes(request.CostCentreApplicationId, ccid, lastBatchEnvelopesIds, request.BatchSize); } } else { response = new BatchDocumentCommandEnvelopeRoutingResponse { ErrorInfo = "Inactive CostCentre Application Id" }; } } catch (Exception ex) { response = new BatchDocumentCommandEnvelopeRoutingResponse { ErrorInfo = "Failed to get next document command" }; _log.InfoFormat("ERROR GetNextDocumentCommandEnvelopes from CCAPPId : {0} with batchsize : {1}", request.CostCentreApplicationId, request.BatchSize); _log.Error(ex); } AuditCCHit(ccid, "GetNextDocumentCommandEnvelopes", JsonConvert.SerializeObject(response.Envelopes.Select(s=>new {s.DocumentType,s.Envelope.Id})), pullType + " OK " + JsonConvert.SerializeObject(request)); return Request.CreateResponse(HttpStatusCode.OK, response); }
public async Task<BatchDocumentCommandEnvelopeRoutingResponse> GetNextCommandEnvelopesAsync(EnvelopeRoutingRequest request) { string url = string.Format("api/commandenveloperouting/GetNextEnvelopes"); var httpClient = setupClient(); var response = await httpClient.PostAsJsonAsync(url, request); var routingResponse = await response.Content.ReadAsAsync<BatchDocumentCommandEnvelopeRoutingResponse>(); return routingResponse; }