using Elsa.Workflows.Helpers; using Elsa.Workflows.Runtime.Activities; using Elsa.Workflows.Runtime.Stimuli; namespace Elsa.Workflows.Runtime; /// public class EventPublisher(IStimulusSender stimulusSender, IStimulusDispatcher stimulusDispatcher) : IEventPublisher { /// public async Task PublishAsync( string eventName, string? correlationId = null, string? workflowInstanceId = null, string? activityInstanceId = null, object? payload = null, bool asynchronous = false, CancellationToken cancellationToken = default) { var stimulus = new EventStimulus(eventName); var workflowInput = new Dictionary { [Event.EventInputWorkflowInputKey] = payload ?? new Dictionary() }; var metadata = new StimulusMetadata { CorrelationId = correlationId, ActivityInstanceId = activityInstanceId, WorkflowInstanceId = workflowInstanceId, Input = workflowInput }; var triggerName = ActivityTypeNameHelper.GenerateTypeName(); if (asynchronous) { await stimulusDispatcher.SendAsync(new() { ActivityTypeName = triggerName, Stimulus = stimulus, Metadata = metadata }, cancellationToken); } else await stimulusSender.SendAsync(triggerName, stimulus, metadata, cancellationToken); } }