private void OnAllEntitiesUpdatedResponse <T>(EntitiesChangedResponse <T> response, MessageReceivedInfo info) where T : EntityBase { foreach (var responseAction in _enitiesUpdatedResponseActions) { responseAction.Invoke(response); } }
private void OnEntitiesUpdated <T>(EntitiesChangedResponse <T> response) where T : EntityBase { if (response.Status == ResponseStatus.Success) { _logger.Log(LogLevel.Debug, string.Format("EntitiesUpdated {0}: Succeeded", response.Id.ToString())); } else { string errors = null; response.Errors.ToList().ForEach(x => { errors = errors + x + "/n"; }); _logger.Log(LogLevel.Error, string.Format("EntitiesUpdated {0}: Failed{2}Errors:{2}{1}", response.Id.ToString(), errors, Environment.NewLine)); } }
private void EntitiesUpdated(EntitiesChangedResponse <T> entitiesChangedResponse, bool privateResponseRequested) { //Publish to entities updated fanout exchange for anyone listening _busManager.Publish(_busManager.EntitiesUpdatedFanoutExchange, entitiesChangedResponse); //If we've been asked for private response - do that as well if (privateResponseRequested) { //response queue won't be in our management bus queue cache so create it first (even though queue should exist on rabbit mq) _busManager.CreateQueue(_busManager.TopicExchange, entitiesChangedResponse.PrivateResponseQueue); _busManager.Publish(_busManager.TopicExchange, entitiesChangedResponse.PrivateResponseQueue, entitiesChangedResponse); } }
private void OnUpdateEntitiesResponse <T>(EntitiesChangedResponse <T> response, MessageReceivedInfo info, TaskCompletionSource <EntitiesChangedResponse <T> > tcs) where T : EntityBase { //Check if we're passing on the result and its one of ours if (_pendingRequests.ContainsKey(response.Id) && tcs != null) { //Remove from pending _pendingRequests.Remove(response.Id); //Unsubscribe from temporary queue and delete it //Doesn't appear to be valid way to unsubscribe so just delete var queueName = response.PrivateResponseQueue; _busManager.DeleteQueue(_busManager.TopicExchange, queueName); _ownedTemporaryQueues.Remove(_ownedTemporaryQueues.SingleOrDefault(q => q == queueName)); //Invoke response handler tcs.SetResult(response); } }
public void UpdateEntities(EntityChangeRequest <T> request) { EntitiesChangedResponse <T> response = null; var result = false; //Use generic data accessor using (var dataAccessor = new DataAccessor <T>(request.User)) { try { dataAccessor.BeginTransaction(); dataAccessor.InsertOrUpdate(request.Entities); dataAccessor.SaveChanges(); dataAccessor.CommitTransaction(); dataAccessor.RefreshEntities(request.Entities); result = true; } catch (Exception ex) { dataAccessor.RollbackTransaction(); _logger.Log(LogLevel.Error, ex, string.Format("UpdateEntities request Id {0} failed.", request.Id)); result = false; response = new EntitiesChangedResponse <T> { Errors = new string[] { ex.Message }.ToList(), EntitiesUpdated = new List <T>(), Id = request.Id, Status = ResponseStatus.Failure }; } } if (result) { _logger.Log(LogLevel.Info, string.Format("UpdateEntities request Id {0} completed successfully.", request.Id)); response = new EntitiesChangedResponse <T> { EntitiesUpdated = request.Entities.ToList(), Id = request.Id, Status = ResponseStatus.Success }; } EntitiesUpdated(response, request.PrivateResponseRequested); }