Comments (5)
A transition on a superstate is only called when there is no transition lower in the hierarchy that matches the event and its guard returns true
.
I suggest that you add the action to be executed in the transition actions lower in the hierarchy.
from statemachine.
Yeah, but how do you know what the super states are?
I've looked it doing it with extensions at the firing event but I'm unable to see what the super state is. Maybe i don't get it, but i like to access https://github.com/appccelerate/statemachine/blob/master/source/Appccelerate.StateMachine/Machine/States/IStateDefinition.cs because there i can see what the super state is. And the events and actions. Like that i could just do recursively for each super state call the action which has the same event.
I cannot do it in a pretty way either at definition since i can't access the hierarchy when building the state machine.
The least favorable way to do this is having an hierarchy defined as a copy, but I don't think that that is a great solution.
Do you've any other suggestions or am i understanding somethings not correctly?
from statemachine.
I see only the way to do this, but as I understood you, that is what you want to prevent:
(pseudo code)
DefineHierarchyOn(Superstate).WithInitialSubState(A).AndChildren(B);
In(SuperState).On(E).Execute(Action);
In(A).On(E).Execute(Action, AnotherAction)
In(B).On(E).Execute(Action, YetAnotherAction)
or call Action
from inside AnotherAction
and YetAnotherAction
.
I thought about adding a possibility to specify whether a transition should be passed from superstates to its children, but I don't really like that idea. I think that calling the action explicitly, makes the state machine easier to understand.
from statemachine.
So what I thought would work before you told me that the deepest event would get fired on duplicate event:
In(SuperState).On(E).Execute(Action);
In(A).On(E).Execute(Action, AnotherAction);
In(B).On(E).Execute(Action, YetAnotherAction);
I think that is pretty explicit. And you could maybe in the define hierarchy choose then what behaviour you want on duplicate event. So by default it would only call the lowest in hierarchy (to preserve backwards compatibility) and if you do define it would call all actions in the hierarchy on the event.
And the second option sounds less favorable to me when using it, because you do have to know which other actions you need to call in the sub state actions.
from statemachine.
As I understand your idea, it wouldn't work. I understand that you assume that transitions in super states for the same event would have the same target state. However, that is not true. A child state could point to Foo
, a superstate to Bar
.
Please correct me if I didn't understand your idea.
from statemachine.
Related Issues (20)
- Events fire with ref or out may not be passed HOT 2
- Some questions HOT 3
- Update website documentation to use builders instead of creating state machines directly
- Cannot test application with state machine using async ExecuteOnEntry action HOT 4
- Exception handling in transition HOT 2
- Event catching weird behaviour HOT 2
- Logging documentation HOT 2
- FindOfferEntry is not answered by the server on Windows 10 HOT 1
- Q: ETA for 6.0? HOT 2
- What is supposed to happen when an event is received in the middle of a state transition? HOT 1
- .NET Standard 2.0 support HOT 1
- Saving and loading machine state HOT 3
- Process event in new state HOT 1
- Is it possible in a certain state to get a list of all next possible states? HOT 2
- Pausing HOT 1
- [Question] How to support chinese HOT 2
- Cannot open Graphml file created in YEdStateMachineReportGeneratorTest HOT 2
- Get Transitions for the current State
- Question: how to log internal changes HOT 5
- Are deferred events planned for the next release. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from statemachine.