コード例 #1
0
 private void OnAllEntitiesUpdatedResponse <T>(EntitiesChangedResponse <T> response, MessageReceivedInfo info) where T : EntityBase
 {
     foreach (var responseAction in _enitiesUpdatedResponseActions)
     {
         responseAction.Invoke(response);
     }
 }
コード例 #2
0
ファイル: Tester.cs プロジェクト: 20taenia/rabbit-connector
 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));
     }
 }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
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);
        }