Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }