public void ProcessFailedSendingCommand(ICommand command) { CommandTaskCompletionSource commandTaskCompletionSource; if (_commandTaskDict.TryRemove(command.Id, out commandTaskCompletionSource)) { var commandResult = new CommandResult(CommandStatus.Failed, command.Id, command.AggregateRootId, "Failed to send the command.", typeof(string).FullName); commandTaskCompletionSource.TaskCompletionSource.TrySetResult(new AsyncTaskResult<CommandResult>(AsyncTaskStatus.Success, commandResult)); } }
public void CompleteMessage(ProcessingCommand message, CommandResult commandResult) { lock (_lockObj2) { if (message.Sequence == _consumedOffset + 1) { _messageDict.Remove(message.Sequence); _consumedOffset = message.Sequence; CompleteMessageWithResult(message, commandResult); ProcessRequestToCompleteOffsets(); } else if (message.Sequence > _consumedOffset + 1) { _requestToCompleteOffsetDict[message.Sequence] = commandResult; } else if (message.Sequence < _consumedOffset + 1) { _messageDict.Remove(message.Sequence); _requestToCompleteOffsetDict.Remove(message.Sequence); } } }
private void ProcessDomainEventHandledMessage(DomainEventHandledMessage message) { CommandTaskCompletionSource commandTaskCompletionSource; if (_commandTaskDict.TryRemove(message.CommandId, out commandTaskCompletionSource)) { var commandResult = new CommandResult(CommandStatus.Success, message.CommandId, message.AggregateRootId, message.CommandResult, message.CommandResult != null ? typeof(string).FullName : null); if (commandTaskCompletionSource.TaskCompletionSource.TrySetResult(new AsyncTaskResult<CommandResult>(AsyncTaskStatus.Success, commandResult))) { if (_logger.IsDebugEnabled) { _logger.DebugFormat("Command result return, {0}", commandResult); } } } }
private void ProcessExecutedCommandMessage(CommandResult commandResult) { CommandTaskCompletionSource commandTaskCompletionSource; if (_commandTaskDict.TryGetValue(commandResult.CommandId, out commandTaskCompletionSource)) { if (commandTaskCompletionSource.CommandReturnType == CommandReturnType.CommandExecuted) { _commandTaskDict.Remove(commandResult.CommandId); if (commandTaskCompletionSource.TaskCompletionSource.TrySetResult(new AsyncTaskResult<CommandResult>(AsyncTaskStatus.Success, commandResult))) { if (_logger.IsDebugEnabled) { _logger.DebugFormat("Command result return, {0}", commandResult); } } } else if (commandTaskCompletionSource.CommandReturnType == CommandReturnType.EventHandled) { if (commandResult.Status == CommandStatus.Failed || commandResult.Status == CommandStatus.NothingChanged) { _commandTaskDict.Remove(commandResult.CommandId); if (commandTaskCompletionSource.TaskCompletionSource.TrySetResult(new AsyncTaskResult<CommandResult>(AsyncTaskStatus.Success, commandResult))) { if (_logger.IsDebugEnabled) { _logger.DebugFormat("Command result return, {0}", commandResult); } } } } } }
public void Complete(CommandResult commandResult) { CommandExecuteContext.OnCommandExecuted(commandResult); }
private void ProcessExecutedCommandMessage(CommandExecutedMessage message) { CommandTaskCompletionSource commandTaskCompletionSource; if (_commandTaskDict.TryGetValue(message.CommandId, out commandTaskCompletionSource)) { if (commandTaskCompletionSource.CommandReturnType == CommandReturnType.CommandExecuted) { _commandTaskDict.Remove(message.CommandId); var commandResult = new CommandResult(message.CommandStatus, message.CommandId, message.AggregateRootId, message.ExceptionTypeName, message.ErrorMessage); if (commandTaskCompletionSource.TaskCompletionSource.TrySetResult(new AsyncTaskResult<CommandResult>(AsyncTaskStatus.Success, commandResult))) { _logger.DebugFormat("Command result setted, commandId:{0}, commandStatus:{1}, aggregateRootId:{2}", message.CommandId, message.CommandStatus, message.AggregateRootId); } } else if (commandTaskCompletionSource.CommandReturnType == CommandReturnType.EventHandled) { if (message.CommandStatus == CommandStatus.Failed || message.CommandStatus == CommandStatus.NothingChanged) { _commandTaskDict.Remove(message.CommandId); var commandResult = new CommandResult(message.CommandStatus, message.CommandId, message.AggregateRootId, message.ExceptionTypeName, message.ErrorMessage); if (commandTaskCompletionSource.TaskCompletionSource.TrySetResult(new AsyncTaskResult<CommandResult>(AsyncTaskStatus.Success, commandResult))) { _logger.DebugFormat("Command result setted, commandId:{0}, commandStatus:{1}, aggregateRootId:{2}, exceptionTypeName:{3}, errorMessage:{4}", message.CommandId, message.CommandStatus, message.AggregateRootId, message.ExceptionTypeName, message.ErrorMessage); } } } } }
private void ProcessDomainEventHandledMessage(DomainEventHandledMessage message) { CommandTaskCompletionSource commandTaskCompletionSource; if (_commandTaskDict.TryRemove(message.CommandId, out commandTaskCompletionSource)) { var commandResult = new CommandResult(CommandStatus.Success, message.CommandId, message.AggregateRootId, null, null); if (commandTaskCompletionSource.TaskCompletionSource.TrySetResult(new AsyncTaskResult<CommandResult>(AsyncTaskStatus.Success, commandResult))) { _logger.DebugFormat("Command result setted, commandId:{0}, commandStatus:{1}, aggregateRootId:{2}", message.CommandId, CommandStatus.Success, message.AggregateRootId); } } }
private void CompleteCommand(ProcessingCommand processingCommand, CommandResult commandResult) { processingCommand.Mailbox.CompleteMessage(processingCommand, commandResult); _logger.InfoFormat("Complete command, aggregateId: {0}", processingCommand.Message.AggregateRootId); }
private void CompleteMessageWithResult(ProcessingCommand processingCommand, CommandResult commandResult) { try { processingCommand.Complete(commandResult); } catch (Exception ex) { _logger.Error(string.Format("Failed to complete command, commandId: {0}, aggregateRootId: {1}", processingCommand.Message.Id, processingCommand.Message.AggregateRootId), ex); } }