public virtual async ValueTask <InvokeId> Start(IIdentifier stateId, IExecutionContext executionContext, CancellationToken token) { if (stateId is null) { throw new ArgumentNullException(nameof(stateId)); } if (executionContext is null) { throw new ArgumentNullException(nameof(executionContext)); } var invokeId = InvokeId.New(stateId, _invoke.Id); if (IdLocationEvaluator is not null) { await IdLocationEvaluator.SetValue(invokeId, executionContext, token).ConfigureAwait(false); } var type = TypeExpressionEvaluator is not null?ToUri(await TypeExpressionEvaluator.EvaluateString(executionContext, token).ConfigureAwait(false)) : _invoke.Type; var source = SourceExpressionEvaluator is not null?ToUri(await SourceExpressionEvaluator.EvaluateString(executionContext, token).ConfigureAwait(false)) : _invoke.Source; var rawContent = ContentBodyEvaluator is IStringEvaluator rawContentEvaluator ? await rawContentEvaluator.EvaluateString(executionContext, token).ConfigureAwait(false) : null; var content = await DataConverter.GetContent(ContentBodyEvaluator, ContentExpressionEvaluator, executionContext, token).ConfigureAwait(false); var parameters = await DataConverter.GetParameters(NameEvaluatorList, ParameterList, executionContext, token).ConfigureAwait(false); Infra.NotNull(type); var invokeData = new InvokeData(invokeId, type) { Source = source, RawContent = rawContent, Content = content, Parameters = parameters }; await executionContext.StartInvoke(invokeData, token).ConfigureAwait(false); return(invokeId); }
public virtual async ValueTask Execute(IExecutionContext executionContext, CancellationToken token) { if (executionContext is null) { throw new ArgumentNullException(nameof(executionContext)); } var sendId = _send.Id is not null?SendId.FromString(_send.Id) : SendId.New(); if (IdLocationEvaluator is not null) { await IdLocationEvaluator.SetValue(sendId, executionContext, token).ConfigureAwait(false); } var name = EventExpressionEvaluator is not null ? await EventExpressionEvaluator.EvaluateString(executionContext, token).ConfigureAwait(false) : _send.EventName; var data = await DataConverter.GetData(ContentBodyEvaluator, ContentExpressionEvaluator, NameEvaluatorList, ParameterList, executionContext, token).ConfigureAwait(false); var type = TypeExpressionEvaluator is not null?ToUri(await TypeExpressionEvaluator.EvaluateString(executionContext, token).ConfigureAwait(false)) : _send.Type; var target = TargetExpressionEvaluator is not null?ToUri(await TargetExpressionEvaluator.EvaluateString(executionContext, token).ConfigureAwait(false)) : _send.Target; var delayMs = DelayExpressionEvaluator is not null ? await DelayExpressionEvaluator.EvaluateInteger(executionContext, token).ConfigureAwait(false) : _send.DelayMs ?? 0; var eventEntity = new EventEntity(name) { SendId = sendId, Type = type, Target = target, DelayMs = delayMs, Data = data }; if (ContentBodyEvaluator is IStringEvaluator rawContentEvaluator) { eventEntity.RawData = await rawContentEvaluator.EvaluateString(executionContext, token).ConfigureAwait(false); } await executionContext.Send(eventEntity, token).ConfigureAwait(false); }