public void OnRequest <T>(EntityChangeRequest <T> request, MessageReceivedInfo info) where T : EntityBase { EntityChangeRequestTask <T> task = new EntityChangeRequestTask <T>(_busManager, request); _executionManager.AddTask(task); _logger.Log(LogLevel.Info, "Added update request to executor: Id " + request.Id.ToString()); }
public async Task <EntitiesChangedResponse <T> > UpdateEntitiesAsync <T>(List <T> entities) where T : EntityBase { //Create request EntityChangeRequest <T> request = new EntityChangeRequest <T>(Guid.NewGuid()); request.Entities = entities; request.User = _user; //Update request to say we want a private response request.PrivateResponseRequested = true; //Add to pending requests _pendingRequests.Add(request.Id, request); //Create tcs for request var tcs = new TaskCompletionSource <EntitiesChangedResponse <T> >(); //Setup and subscribe to temp response queue IQueue resultQueue = _busManager.CreateQueue(_busManager.TopicExchange, request.PrivateResponseQueue); _busManager.Subscribe <EntitiesChangedResponse <T> >(_busManager.TopicExchange, request.PrivateResponseQueue, (response, info) => OnUpdateEntitiesResponse(response, info, tcs)); _ownedTemporaryQueues.Add(request.PrivateResponseQueue); //Send request _busManager.Publish(_busManager.TopicExchange, TopicQueues.ProductEntitiesUpdate, request); //Return request guid return(await tcs.Task); }
public Guid UpdateEntities <T>(Action <EntitiesChangedResponse <T> > onResponse, List <T> entities) where T : EntityBase { //Create request EntityChangeRequest <T> request = new EntityChangeRequest <T>(Guid.NewGuid()); request.Entities = entities; request.User = _user; //Subscribe to temp response queue if not null if (onResponse != null) { //Update request to say we want a private response request.PrivateResponseRequested = true; //Add to pending requests _pendingRequests.Add(request.Id, request); //Setup and subscribe to temp response queue IQueue resultQueue = _busManager.CreateQueue(_busManager.TopicExchange, request.PrivateResponseQueue); _busManager.Subscribe <EntitiesChangedResponse <T> >(_busManager.TopicExchange, request.PrivateResponseQueue, (response, info) => OnUpdateEntitiesResponse(response, info, onResponse)); _ownedTemporaryQueues.Add(request.PrivateResponseQueue); } //Send request _busManager.Publish(_busManager.TopicExchange, TopicQueues.ProductEntitiesUpdate, request); //Return request guid return(request.Id); }
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); }