Работа с MassTransit я подготовил простой Стеймейн и пытаясь визуализировать его как диаграмму русалки, но столкнувшись со странным поведением < /p>
Вот мой код машины состояния < /p>
public class TestState : SagaStateMachineInstance
{
public Guid CorrelationId { get; set; }
public string CurrentState { get; set; }
public int ReadyEventStatus { get; set; }
public int ReadyEventStatus2 { get; set; }
}
public class TestStateMachine : MassTransitStateMachine
{
public State Ready { get; private set; } = null!;
public State DataPrepared { get; private set; } = null!;
public Event UploadedEvent { get; private set; }
public Event CreatedEvent { get; private set; }
public Event CompositeReadyEvent { get; private set; }
public Event FilesMovedEvent { get; private set; }
public Event RecsPreparedEvent { get; private set; }
public Event CpmpositeDataPreparedEvent { get; private set; }
public Event
PrepareBackgroundJobEvent { get; private set; }
public TestStateMachine()
{
Event(() => UploadedEvent, e => e.CorrelateById(context => context.Message.CorrelationId));
Event(() => CreatedEvent, e => e.CorrelateById(context => context.Message.CorrelationId));
Event(() => PrepareBackgroundJobEvent, e => e.CorrelateById(context => context.Message.CorrelationId));
InstanceState(x => x.CurrentState);
Initially(
When(UploadedEvent)
.Then(context => {
Console.WriteLine("Application Uploaded 1 : {0}", context.Saga.CorrelationId);
}),
When(CreatedEvent)
.Then(context => Console.WriteLine("Application Created 1 : {0}", context.Saga.CorrelationId))
);
CompositeEvent(() => CompositeReadyEvent, x => x.ReadyEventStatus, CompositeEventOptions.IncludeInitial, UploadedEvent, CreatedEvent);
During(Initial,
When(CompositeReadyEvent)
.Then(context => Console.WriteLine("Application Ready: {0}", context.Saga.CorrelationId))
.TransitionTo(Ready)
);
CompositeEvent(() => CpmpositeDataPreparedEvent, x => x.ReadyEventStatus2, CompositeEventOptions.IncludeInitial, FilesMovedEvent, RecsPreparedEvent);
During(Ready,
When(CpmpositeDataPreparedEvent)
.Then(context => Console.WriteLine("Application data prepared: {0}", context.Saga.CorrelationId))
.TransitionTo(DataPrepared)
);
During(DataPrepared,
When(PrepareBackgroundJobEvent)
.Then(context => Console.WriteLine("Application creation completed: {0}", context.Saga.CorrelationId))
);
SetCompletedWhenFinalized();
}
}
< /code>
Для визуализации я использую MassTransit.stateMachineVisualizer < /p>
var machine = new TestStateMachine();
var graph = machine.GetGraph();
var generator = new StateMachineMermaidGenerator(graph);
string mermaid = generator.CreateMermaidFile();
< /code>
И я получаю следующие результаты < /p>
flowchart TB;
0(["Initial"]) --> 3["UploadedEvent"];
0(["Initial"]) --> 5["CreatedEvent"];
0(["Initial"]) --> 6["FilesMovedEvent"];
0(["Initial"]) --> 8["RecsPreparedEvent"];
3["UploadedEvent"] --> 4[\"CompositeReadyEvent"/];
4[\"CompositeReadyEvent"/] --> 1(["Ready"]);
5["CreatedEvent"] --> 4[\"CompositeReadyEvent"/];
6["FilesMovedEvent"] --> 7[\"CpmpositeDataPreparedEvent"/];
7[\"CpmpositeDataPreparedEvent"/] --> 2(["DataPrepared"]);
8["RecsPreparedEvent"] --> 7[\"CpmpositeDataPreparedEvent"/];
Правильно ли, что «filesmovenEvent» и «RecSpRearedEvent» выходят из первоначального события, учитывая, что я выполнил TransitionTo (готово) и TransitionTo (dataPrepared), я ожидаю, что состояние «готово» должно быть родителем для «FilesMovenEvent» и «RecSpRepRearedEvent» События.>
Работа с MassTransit я подготовил простой Стеймейн и пытаясь визуализировать его как диаграмму русалки, но столкнувшись со странным поведением < /p> Вот мой код машины состояния < /p> [code] public class TestState : SagaStateMachineInstance { public Guid CorrelationId { get; set; } public string CurrentState { get; set; } public int ReadyEventStatus { get; set; } public int ReadyEventStatus2 { get; set; } }
public class TestStateMachine : MassTransitStateMachine { public State Ready { get; private set; } = null!; public State DataPrepared { get; private set; } = null!;
public Event UploadedEvent { get; private set; } public Event CreatedEvent { get; private set; }
public Event CompositeReadyEvent { get; private set; }
public Event FilesMovedEvent { get; private set; } public Event RecsPreparedEvent { get; private set; }
public Event CpmpositeDataPreparedEvent { get; private set; }
public Event PrepareBackgroundJobEvent { get; private set; }
public TestStateMachine() { Event(() => UploadedEvent, e => e.CorrelateById(context => context.Message.CorrelationId)); Event(() => CreatedEvent, e => e.CorrelateById(context => context.Message.CorrelationId)); Event(() => PrepareBackgroundJobEvent, e => e.CorrelateById(context => context.Message.CorrelationId));
SetCompletedWhenFinalized(); } } < /code> Для визуализации я использую MassTransit.stateMachineVisualizer < /p> var machine = new TestStateMachine(); var graph = machine.GetGraph(); var generator = new StateMachineMermaidGenerator(graph); string mermaid = generator.CreateMermaidFile(); < /code> И я получаю следующие результаты < /p> flowchart TB; 0(["Initial"]) --> 3["UploadedEvent"]; 0(["Initial"]) --> 5["CreatedEvent"]; 0(["Initial"]) --> 6["FilesMovedEvent"]; 0(["Initial"]) --> 8["RecsPreparedEvent"]; 3["UploadedEvent"] --> 4[\"CompositeReadyEvent"/]; 4[\"CompositeReadyEvent"/] --> 1(["Ready"]); 5["CreatedEvent"] --> 4[\"CompositeReadyEvent"/]; 6["FilesMovedEvent"] --> 7[\"CpmpositeDataPreparedEvent"/]; 7[\"CpmpositeDataPreparedEvent"/] --> 2(["DataPrepared"]); 8["RecsPreparedEvent"] --> 7[\"CpmpositeDataPreparedEvent"/]; [/code]
Правильно ли, что «filesmovenEvent» и «RecSpRearedEvent» выходят из первоначального события, учитывая, что я выполнил TransitionTo (готово) и TransitionTo (dataPrepared), я ожидаю, что состояние «готово» должно быть родителем для «FilesMovenEvent» и «RecSpRepRearedEvent» События.>
Предположим, у конечного автомата есть список состояний:
seald class State {
data class A : State()
data class B : State()
data class C : State()
data class D : State()
}
Итак, согласно чистой архитектуре, государство является моделью домена. Но...
Предположим, у конечного автомата есть список состояний:
seald class State {
data class A : State()
data class B : State()
data class C : State()
data class D : State()
}
Итак, согласно чистой архитектуре, государство является моделью домена. Но...
Я стремлюсь создать новый экземпляр конечного автомата, если он не существует в базе данных, и сохранить конфигурацию и контекст в базе данных. Однако я не могу установить конфигурацию по умолчанию в базе данных. Если я не указываю идентификатор...
Моя цель : настроить State Machine для сохранения внутренних данных при любых изменениях и восстановления из базы данных, когда мне нужно их использовать.
Реализация : Spring Docs
Проблема : он отлично работает при одном запуске (сохранение в БД и...
Я не знаю, имеет ли свой заголовок вопрос о том, что заранее извиняюсь за это. Итак ... я пытаюсь реализовать машину состояния для небольшой игры, которую я пытаюсь сделать, используя C ++ и SFML.