Exemple #1
0
        private TrackedCommand SendCommand <T>(T command) where T : IDomainCommand
        {
            var messagingCommand = DomainMessageTranslator.TranslateCommand(command, new CommandType(command.GetType().Name));

            _resultPublisher.Publish(new DomainResult(command, ResultCode.Unknown));
            _logger.InfoFormat("Queuing {0}", command.GetType());
            _commandQueue.QueueCommand(messagingCommand);
            return(messagingCommand);
        }
Exemple #2
0
        public bool Dispatch(ICommand message)
        {
            _logger.InfoFormat("Dispatching message {0}", message.Type.Value);
            InitCache();
            HandlerStore handlerStore;

            _handlersCache.TryGetValue(message.Type.Value, out handlerStore);
            if (handlerStore != null)
            {
                var cqrsMessage = DomainMessageTranslator.TranslateCommand(message, handlerStore.CqrsMessageType);
                if (cqrsMessage is IDomainCommand)
                {
                    _logger.DebugFormat("Handling command");
                    HandleCommand(handlerStore, cqrsMessage as IDomainCommand);
                }
                else
                {
                    _logger.DebugFormat("Handling event");
                    HandleMessage(handlerStore, cqrsMessage);
                }
            }
            else
            {
                var cqrsMessage = DomainMessageTranslator.TranslateCommand(message, typeof(GenericDomainMessage));

                _logger.DebugFormat("No known handler for {0}, returning", message.Type.Value);
                var cqrsResult = new DomainResult
                {
                    Id         = message.Id,
                    TrackingId = cqrsMessage.TrackingId,
                    ResultCode = ResultCode.OK
                };
                _resultPublisher.Publish(cqrsResult);
            }
            return(true);
        }
Exemple #3
0
        public Task Publish <T, TClean>(Result <T, TClean> result)
        {
            // Disable the warning, because the task is being tracked on the set,
            // and immediately removed upon completion.
#pragma warning disable CS4014
            var subTask = Task.Run(async() =>
            {
                try
                {
                    await _publisher.Publish(result);
                }
                catch (Exception ex)
                {
                    _onPublisherException(ex);
                }
            });
            _publishingTasks.TryAdd(subTask);
            subTask.ContinueWith(_ =>
            {
                _publishingTasks.TryRemove(subTask);
            });
#pragma warning restore CS4014
            return(Task.FromResult((object)null));
        }