using Elsa.MassTransit.Messages;
using Elsa.Workflows.Runtime.Models;
using Elsa.Workflows.Runtime.Services;
using MassTransit;
namespace Elsa.MassTransit.Implementations;
///
/// Implements by leveraging MassTransit.
///
public class MassTransitWorkflowDispatcher : IWorkflowDispatcher
{
private readonly IBus _bus;
///
/// Constructor.
///
public MassTransitWorkflowDispatcher(IBus bus)
{
_bus = bus;
}
///
public async Task DispatchAsync(DispatchWorkflowDefinitionRequest request, CancellationToken cancellationToken = default)
{
await _bus.Publish(new
{
request.DefinitionId,
request.Input,
request.CorrelationId,
request.VersionOptions
}, cancellationToken);
return new();
}
///
public async Task DispatchAsync(DispatchWorkflowInstanceRequest request, CancellationToken cancellationToken = default)
{
await _bus.Publish(new
{
request.Input,
request.ActivityId,
request.BookmarkId,
request.CorrelationId,
request.InstanceId
}, cancellationToken);
return new();
}
///
public async Task DispatchAsync(DispatchTriggerWorkflowsRequest request, CancellationToken cancellationToken = default)
{
await _bus.Publish(new
{
request.Input,
request.BookmarkPayload,
request.CorrelationId,
request.ActivityTypeName
}, cancellationToken);
return new();
}
///
public async Task DispatchAsync(DispatchResumeWorkflowsRequest request, CancellationToken cancellationToken = default)
{
await _bus.Publish(new
{
request.Input,
request.BookmarkPayload,
request.CorrelationId,
request.ActivityTypeName
}, cancellationToken);
return new();
}
}