Signaling refactorings
This commit is contained in:
parent
d9b0f01029
commit
3fc3f792f2
|
|
@ -27,7 +27,6 @@
|
|||
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
|
||||
<PackageReference Include="Open.Linq.AsyncExtensions" Version="1.2.0" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -8,8 +8,7 @@ using Microsoft.AspNetCore.Mvc;
|
|||
namespace Elsa.Activities.Http.Endpoints.Signals
|
||||
{
|
||||
[ApiController]
|
||||
[ApiVersion("1")]
|
||||
[Route("v{version:apiVersion}/signals/dispatch/{token}")]
|
||||
[Route("signals/dispatch/{token}")]
|
||||
[Produces("application/json")]
|
||||
public class DispatchEndpoint : ControllerBase
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,8 +8,7 @@ using Microsoft.AspNetCore.Mvc;
|
|||
namespace Elsa.Activities.Http.Endpoints.Signals
|
||||
{
|
||||
[ApiController]
|
||||
[ApiVersion("1")]
|
||||
[Route("v{version:apiVersion}/signals/trigger/{token}")]
|
||||
[Route("signals/trigger/{token}")]
|
||||
[Produces("application/json")]
|
||||
public class TriggerEndpoint : ControllerBase
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
using Elsa.Activities.Http.Models;
|
||||
using Elsa.Activities.Http.Services;
|
||||
using Elsa.Services.Models;
|
||||
|
||||
namespace Elsa.Activities.Http.Extensions
|
||||
{
|
||||
public static class ActivityExecutionContextExtensions
|
||||
{
|
||||
public static string GenerateSignalUrl(this ActivityExecutionContext context, string signal)
|
||||
{
|
||||
var workflowInstanceId =
|
||||
context.WorkflowExecutionContext.WorkflowInstance.Id;
|
||||
|
||||
var payload = new Signal(signal, workflowInstanceId);
|
||||
var tokenService = context.GetService<ITokenService>();
|
||||
var token = tokenService.CreateToken(payload);
|
||||
var url = $"/signals/trigger/{token}";
|
||||
var absoluteUrlProvider = context.GetService<IAbsoluteUrlProvider>();
|
||||
return absoluteUrlProvider.ToAbsoluteUrl(url).ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Elsa.Activities.Http.Extensions;
|
||||
using Elsa.Activities.Http.Models;
|
||||
using Elsa.Activities.Http.Services;
|
||||
using Elsa.Scripting.JavaScript.Messages;
|
||||
|
|
@ -12,16 +13,13 @@ namespace Elsa.Activities.Http.Handlers
|
|||
{
|
||||
public class ConfigureJavaScriptEngine : INotificationHandler<EvaluatingJavaScriptExpression>
|
||||
{
|
||||
private readonly ITokenService _tokenService;
|
||||
private readonly IAbsoluteUrlProvider _absoluteUrlProvider;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public ConfigureJavaScriptEngine(
|
||||
ITokenService tokenService,
|
||||
IAbsoluteUrlProvider absoluteUrlProvider,
|
||||
IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
_tokenService = tokenService;
|
||||
_absoluteUrlProvider = absoluteUrlProvider;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
|
@ -33,7 +31,7 @@ namespace Elsa.Activities.Http.Handlers
|
|||
|
||||
engine.SetValue(
|
||||
"queryString",
|
||||
(Func<string, string>)(key => _httpContextAccessor.HttpContext.Request.Query[key].ToString())
|
||||
(Func<string, string>)(key => _httpContextAccessor.HttpContext!.Request.Query[key].ToString())
|
||||
);
|
||||
engine.SetValue(
|
||||
"absoluteUrl",
|
||||
|
|
@ -41,22 +39,10 @@ namespace Elsa.Activities.Http.Handlers
|
|||
);
|
||||
engine.SetValue(
|
||||
"signalUrl",
|
||||
(Func<string, string>)(signal => GenerateUrl(signal, activityExecutionContext))
|
||||
(Func<string, string>)(signal => activityExecutionContext.GenerateSignalUrl(signal))
|
||||
);
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private string GenerateUrl(string signal, ActivityExecutionContext activityExecutionContext)
|
||||
{
|
||||
var workflowInstanceId =
|
||||
activityExecutionContext.WorkflowExecutionContext.WorkflowInstance.Id;
|
||||
|
||||
var payload = new Signal(signal, workflowInstanceId);
|
||||
var token = _tokenService.CreateToken(payload);
|
||||
var url = $"/workflows/signal?token={token}";
|
||||
|
||||
return _absoluteUrlProvider.ToAbsoluteUrl(url).ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,6 @@ namespace Elsa.Metadata
|
|||
{
|
||||
public static class ActivityDescriberExtensions
|
||||
{
|
||||
public static ActivityDescriptor? Describe<T>(this IDescribeActivityType type) where T : IActivity => type.Describe(typeof(T));
|
||||
public static ActivityDescriptor? Describe<T>(this IDescribesActivityType type) where T : IActivity => type.Describe(typeof(T));
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@ using System;
|
|||
|
||||
namespace Elsa.Metadata
|
||||
{
|
||||
public interface IDescribeActivityType
|
||||
public interface IDescribesActivityType
|
||||
{
|
||||
ActivityDescriptor? Describe(Type activityType);
|
||||
}
|
||||
|
|
@ -12,15 +12,15 @@ namespace Elsa.ActivityTypeProviders
|
|||
{
|
||||
public class TypeBasedActivityProvider : IActivityTypeProvider
|
||||
{
|
||||
private readonly IDescribeActivityType _describeActivityType;
|
||||
private readonly IDescribesActivityType _describesActivityType;
|
||||
private readonly IActivityActivator _activityActivator;
|
||||
private readonly ElsaOptions _elsaOptions;
|
||||
|
||||
public TypeBasedActivityProvider(ElsaOptions options,
|
||||
IDescribeActivityType describeActivityType,
|
||||
IDescribesActivityType describesActivityType,
|
||||
IActivityActivator activityActivator)
|
||||
{
|
||||
_describeActivityType = describeActivityType;
|
||||
_describesActivityType = describesActivityType;
|
||||
_activityActivator = activityActivator;
|
||||
_elsaOptions = options;
|
||||
}
|
||||
|
|
@ -31,7 +31,7 @@ namespace Elsa.ActivityTypeProviders
|
|||
|
||||
private ActivityType? CreateActivityType(Type activityType)
|
||||
{
|
||||
var info = _describeActivityType.Describe(activityType);
|
||||
var info = _describesActivityType.Describe(activityType);
|
||||
|
||||
if (info == null)
|
||||
return default;
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
|
||||
// Metadata.
|
||||
services
|
||||
.AddSingleton<IDescribeActivityType, TypedActivityTypeDescriber>()
|
||||
.AddSingleton<IDescribesActivityType, TypedActivityTypeDescriber>()
|
||||
.AddSingleton<IActivityPropertyOptionsResolver, ActivityPropertyOptionsResolver>()
|
||||
.AddSingleton<IActivityPropertyDefaultValueResolver, ActivityPropertyDefaultValueResolver>()
|
||||
.AddSingleton<IActivityPropertyUIHintResolver, ActivityPropertyUIHintResolver>();
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ using Humanizer;
|
|||
|
||||
namespace Elsa.Metadata
|
||||
{
|
||||
public class TypedActivityTypeDescriber : IDescribeActivityType
|
||||
public class TypedActivityTypeDescriber : IDescribesActivityType
|
||||
{
|
||||
private readonly IActivityPropertyOptionsResolver _optionsResolver;
|
||||
private readonly IActivityPropertyUIHintResolver _uiHintResolver;
|
||||
|
|
|
|||
10356
src/designer/elsa-workflows-studio/package-lock.json
generated
10356
src/designer/elsa-workflows-studio/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -27,29 +27,27 @@
|
|||
"build:tailwind:prod": "cross-env NODE_ENV=production tailwind build ./tailwind.css -o ./src/globals/tailwind.css & copyfiles -u 2 \"./src/globals/tailwind.css\" \"./src/assets\""
|
||||
},
|
||||
"dependencies": {
|
||||
"@fullhuman/postcss-purgecss": "^4.0.2",
|
||||
"@stencil/core": "^2.4.0",
|
||||
"@fullhuman/postcss-purgecss": "^4.0.3",
|
||||
"@stencil/core": "^2.5.2",
|
||||
"@stencil/postcss": "^2.0.0",
|
||||
"@stencil/state-tunnel": "^1.0.1",
|
||||
"@stencil/store": "^1.4.1",
|
||||
"@tailwindcss/forms": "^0.2.1",
|
||||
"@tailwindcss/ui": "^0.7.2",
|
||||
"autoprefixer": "10.2.4",
|
||||
"autoprefixer": "10.2.5",
|
||||
"axios": "^0.21.1",
|
||||
"cssnano": "^4.1.10",
|
||||
"el-transition": "^0.0.7",
|
||||
"eslint": "7.20.0",
|
||||
"eslint": "7.23.0",
|
||||
"js-event-bus": "^1.0.3",
|
||||
"jsplumb": "2.15.5",
|
||||
"monaco-editor": "^0.22.3",
|
||||
"postcss": "^8.2.6",
|
||||
"monaco-editor": "^0.23.0",
|
||||
"postcss": "^8.2.9",
|
||||
"postcss-import": "^14.0.0",
|
||||
"postcss-preset-env": "^6.7.0",
|
||||
"stencil-click-outside": "^1.7.1",
|
||||
"tailwindcss": "2.0.3",
|
||||
"tailwindcss": "2.0.4",
|
||||
"tslint": "6.1.3",
|
||||
"tslint-stencil": "1.0.1",
|
||||
"typescript": "4.2.2",
|
||||
"typescript": "4.2.3",
|
||||
"typescript-tslint-plugin": "1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj" />
|
||||
<ProjectReference Include="..\..\..\activities\Elsa.Activities.Temporal.Quartz\Elsa.Activities.Temporal.Quartz.csproj" />
|
||||
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,19 @@
|
|||
using Elsa.Samples.ForkJoinTimerAndSignalHttp.Workflows;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Elsa.Samples.ForkJoinTimerAndSignalHttp
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
public Startup(IConfiguration configuration)
|
||||
{
|
||||
Configuration = configuration;
|
||||
}
|
||||
|
||||
public IConfiguration Configuration { get; }
|
||||
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services
|
||||
|
|
@ -14,6 +22,7 @@ namespace Elsa.Samples.ForkJoinTimerAndSignalHttp
|
|||
services
|
||||
.AddElsa(options => options
|
||||
.AddConsoleActivities()
|
||||
.AddHttpActivities(httpOptions => Configuration.GetSection("Elsa:Http").Bind(httpOptions))
|
||||
.AddQuartzTemporalActivities()
|
||||
.StartWorkflow<DemoWorkflow>()
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using Elsa.Activities.Console;
|
||||
using Elsa.Activities.ControlFlow;
|
||||
using Elsa.Activities.Http.Extensions;
|
||||
using Elsa.Activities.Primitives;
|
||||
using Elsa.Activities.Temporal;
|
||||
using Elsa.Builders;
|
||||
|
|
@ -19,14 +20,15 @@ namespace Elsa.Samples.ForkJoinTimerAndSignalHttp.Workflows
|
|||
public DemoWorkflow(IClock clock)
|
||||
{
|
||||
_clock = clock;
|
||||
_timeOut = Duration.FromSeconds(10);
|
||||
_timeOut = Duration.FromSeconds(20);
|
||||
}
|
||||
|
||||
public void Build(IWorkflowBuilder builder)
|
||||
{
|
||||
builder
|
||||
.SetVariable("SignalUrl", context => context.GenerateSignalUrl("hurry"))
|
||||
.WriteLine(context =>
|
||||
$"The demo completes in {_timeOut.ToString()} ({_clock.GetCurrentInstant().Plus(_timeOut)}). Can't wait that long? Send me the secret \"hurry\" signal! (http://localhost:7304/signal/hurry/trigger?correlationId={GetCorrelationId(context)})")
|
||||
$"The demo completes in {_timeOut.ToString()} ({_clock.GetCurrentInstant().Plus(_timeOut)}). Can't wait that long? Send me the secret \"hurry\" signal! ({context.GetVariable<string>("SignalUrl")})")
|
||||
.Then<Fork>(
|
||||
fork => fork.WithBranches("Timer", "Signal"),
|
||||
fork =>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,14 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
},
|
||||
"Elsa": {
|
||||
"Http": {
|
||||
"BaseUrl": "http://localhost:7304"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue