Skip to content

Commit 2b1c37f

Browse files
committed
for version 1.2.0
1 parent 2415432 commit 2b1c37f

File tree

6 files changed

+61
-40
lines changed

6 files changed

+61
-40
lines changed

SimpleStateMachineLibrary/StateMachines/InvokeParameters.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,22 @@ public static class InvokeParametersExtension
1818
{
1919
public static InvokeParameters AddParameter(this InvokeParameters invokeParameters, string nameParameter, object valueParameter)
2020
{
21+
if(invokeParameters.StateMachine._nextParameters ==null)
22+
{
23+
invokeParameters.StateMachine._nextParameters = new Dictionary<string, object>();
24+
}
25+
2126
invokeParameters.StateMachine._nextParameters.Add(nameParameter, valueParameter);
2227
return invokeParameters;
2328
}
2429

2530
public static InvokeParameters AddParameters(this InvokeParameters invokeParameters, Dictionary<string, object> parameters)
2631
{
32+
if (invokeParameters.StateMachine._nextParameters == null)
33+
{
34+
invokeParameters.StateMachine._nextParameters = new Dictionary<string, object>();
35+
}
36+
2737
foreach (var parameter in parameters)
2838
{
2939
invokeParameters.StateMachine._nextParameters.Add(parameter.Key, parameter.Value);

SimpleStateMachineLibrary/StateMachines/StateMachine.cs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,33 +87,39 @@ public State SetStartState(string stateName)
8787
return StartState;
8888
}
8989

90-
public InvokeParameters InvokeTransition(string nameTransition)
90+
public InvokeParameters InvokeTransition(string nameTransition, Dictionary<string, object> parameters=null)
9191
{
9292
_nextTransition = Check.GetElement(_transitions, nameTransition, this._logger, out bool result, true);
9393

94-
if(_nextTransition.StateFrom!=CurrentState)
94+
CheckBeforeInvoke(this._logger);
95+
96+
return new InvokeParameters(this);
97+
}
98+
99+
private void CheckBeforeInvoke(ILogger logger)
100+
{
101+
if (_nextTransition.StateFrom != CurrentState)
95102
{
96-
object[] args = { nameTransition, CurrentState?.Name };
103+
object[] args = { _nextTransition.Name, CurrentState?.Name };
97104
string message = "Transition \"{0}\" not available from state \"{0}\"";
98105
var exception = new ArgumentException(message: String.Format(message, args));
99106
_logger?.LogError(exception, message, args);
100107

101108
throw exception;
102109
}
103-
_logger?.LogDebug("Transition \"{NameTransition}\" set as next", nameTransition);
104-
105-
return new InvokeParameters(this);
110+
_logger?.LogDebug("Transition \"{NameTransition}\" set as next", _nextTransition.Name);
106111
}
107112

108-
public InvokeParameters InvokeTransitionWithParameters(string nameTransition, Dictionary<string, object> parameters)
109-
{
110-
InvokeTransition(nameTransition);
113+
public InvokeParameters InvokeTransition(Transition transition, Dictionary<string, object> parameters = null)
114+
{
115+
_nextTransition = Check.NamedObject(transition, this._logger);
111116

112-
_nextParameters = parameters;
117+
CheckBeforeInvoke(this._logger);
113118

114119
return new InvokeParameters(this);
115120
}
116121

122+
117123
private StateMachine InvokeTransition()
118124
{
119125

@@ -130,7 +136,7 @@ private StateMachine InvokeTransition()
130136
CurrentState = null;
131137

132138

133-
CurrentTransition.Invoke(_currentParameters);
139+
CurrentTransition.Invoking(_currentParameters);
134140
CurrentState = CurrentTransition.StateTo;
135141
CurrentTransition = null;
136142

SimpleStateMachineLibrary/StateMachines/StateMachineWorkWithTransitionsForState.cs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,80 +8,80 @@ namespace SimpleStateMachineLibrary
88
public partial class StateMachine
99
{
1010

11-
private Dictionary<string, Transition> GetTransitionsFromState(string stateName, bool exceptions)
11+
private Dictionary<string, Transition> GetTransitionsFromState(string stateName, out bool result, bool exceptions)
1212
{
13-
bool contains = Check.Contains(_states, stateName, this._logger, exceptions);
14-
var transitionsFromState = contains ? _transitions.Values.Where(x => x.StateFrom.Name == stateName).ToDictionary(x => x.Name, x => x) : new Dictionary<string, Transition>();
13+
result = Check.Contains(_states, stateName, this._logger, exceptions);
14+
var transitionsFromState = result ? _transitions.Values.Where(x => x.StateFrom.Name == stateName).ToDictionary(x => x.Name, x => x) : new Dictionary<string, Transition>();
1515

1616
_logger?.LogDebug("Get transitions from state \"{NameState}\" ", stateName);
1717
return transitionsFromState;
1818
}
1919

20-
private Dictionary<string, Transition> GetTransitionsFromState(State state, bool exceptions)
20+
private Dictionary<string, Transition> GetTransitionsFromState(State state, out bool result, bool exceptions)
2121
{
22-
bool contains = Check.Contains(_states, state, this._logger, exceptions);
23-
var transitionsFromState = contains ? _transitions.Values.Where(x => x.StateFrom.Name == state.Name).ToDictionary(x => x.Name, x => x) : new Dictionary<string, Transition>();
22+
result = Check.Contains(_states, state, this._logger, exceptions);
23+
var transitionsFromState = result ? _transitions.Values.Where(x => x.StateFrom.Name == state.Name).ToDictionary(x => x.Name, x => x) : new Dictionary<string, Transition>();
2424

2525
_logger?.LogDebug("Get transitions from state \"{NameState}\" ", state.Name);
2626
return transitionsFromState;
2727
}
2828

29-
private Dictionary<string, Transition> GetTransitionsToState(string stateName, bool exceptions)
29+
private Dictionary<string, Transition> GetTransitionsToState(string stateName, out bool result, bool exceptions)
3030
{
31-
bool contains = Check.Contains(_states, stateName, this._logger, exceptions);
32-
var transitionsToState = contains ? _transitions.Values.Where(x => x.StateTo.Name == stateName).ToDictionary(x => x.Name, x => x) : new Dictionary<string, Transition>();
31+
result = Check.Contains(_states, stateName, this._logger, exceptions);
32+
var transitionsToState = result ? _transitions.Values.Where(x => x.StateTo.Name == stateName).ToDictionary(x => x.Name, x => x) : new Dictionary<string, Transition>();
3333

3434
_logger?.LogDebug("Get transitions to state \"{NameState}\" ", stateName);
3535
return transitionsToState;
3636
}
3737

38-
private Dictionary<string, Transition> GetTransitionsToState(State state, bool exceptions)
38+
private Dictionary<string, Transition> GetTransitionsToState(State state, out bool result, bool exceptions)
3939
{
40-
bool contains = Check.Contains(_states, state, this._logger, exceptions);
41-
var transitionsToState = contains ? _transitions.Values.Where(x => x.StateTo.Name == state.Name).ToDictionary(x => x.Name, x => x) : new Dictionary<string, Transition>();
40+
result = Check.Contains(_states, state, this._logger, exceptions);
41+
var transitionsToState = result ? _transitions.Values.Where(x => x.StateTo.Name == state.Name).ToDictionary(x => x.Name, x => x) : new Dictionary<string, Transition>();
4242

4343
_logger?.LogDebug("Get transitions to state \"{NameState}\" ", state.Name);
4444
return transitionsToState;
4545
}
4646

4747
public Dictionary<string, Transition> GetTransitionsFromState(string stateName)
4848
{
49-
return GetTransitionsFromState(stateName, true);
49+
return GetTransitionsFromState(stateName, out bool result, true);
5050
}
5151

5252
public Dictionary<string, Transition> GetTransitionsFromState(State state)
5353
{
54-
return GetTransitionsFromState(state, true);
54+
return GetTransitionsFromState(state, out bool result, true);
5555
}
5656

57-
public Dictionary<string, Transition> TryGetTransitionsFromState(string stateName)
57+
public Dictionary<string, Transition> TryGetTransitionsFromState(string stateName, out bool result)
5858
{
59-
return GetTransitionsFromState(stateName, false);
59+
return GetTransitionsFromState(stateName, out result, false);
6060
}
6161

62-
public Dictionary<string, Transition> TryGetTransitionsFromState(State state)
62+
public Dictionary<string, Transition> TryGetTransitionsFromState(State state, out bool result)
6363
{
64-
return GetTransitionsFromState(state, false);
64+
return GetTransitionsFromState(state, out result, false);
6565
}
6666

6767
public Dictionary<string, Transition> GetTransitionsToState(string stateName)
6868
{
69-
return GetTransitionsToState(stateName, true);
69+
return GetTransitionsToState(stateName, out bool result, true);
7070
}
7171

7272
public Dictionary<string, Transition> GetTransitionsToState(State state)
7373
{
74-
return GetTransitionsToState(state, true);
74+
return GetTransitionsToState(state, out bool result, true);
7575
}
7676

77-
public Dictionary<string, Transition> TryGetTransitionsToState(string stateName)
77+
public Dictionary<string, Transition> TryGetTransitionsToState(string stateName, out bool result)
7878
{
79-
return GetTransitionsToState(stateName, false);
79+
return GetTransitionsToState(stateName, out result, false);
8080
}
8181

82-
public Dictionary<string, Transition> TryGetTransitionsToState(State state)
82+
public Dictionary<string, Transition> TryGetTransitionsToState(State state, out bool result)
8383
{
84-
return GetTransitionsToState(state, false);
84+
return GetTransitionsToState(state, out result, false);
8585
}
8686

8787
}

SimpleStateMachineLibrary/States/StateWorkWithTransitionsFromThisState.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ public Dictionary<string, Transition> GetTransitionsFromThis()
1111
return this.StateMachine.GetTransitionsFromState(this);
1212
}
1313

14-
public Dictionary<string, Transition> TryGetTransitionsFromThis()
14+
public Dictionary<string, Transition> TryGetTransitionsFromThis(out bool result)
1515
{
16-
return this.StateMachine.TryGetTransitionsFromState(this);
16+
return this.StateMachine.TryGetTransitionsFromState(this, out result);
1717
}
1818

1919
public Transition AddTransitionFromThis(string nameTransition, State stateTo, Action<Transition, Dictionary<string, object>> actionOnInvoke = null)

SimpleStateMachineLibrary/States/StateWorkWithTransitionsToThisState.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ public Dictionary<string, Transition> GetTransitionsToThis()
1212
return this.StateMachine.GetTransitionsToState(this);
1313
}
1414

15-
public Dictionary<string, Transition> TryGetTransitionsToThis()
15+
public Dictionary<string, Transition> TryGetTransitionsToThis(out bool result)
1616
{
17-
return this.StateMachine.TryGetTransitionsToState(this);
17+
return this.StateMachine.TryGetTransitionsToState(this, out result);
1818
}
1919

2020
public Transition AddTransitionToThis(string nameTransition, State stateFrom, Action<Transition, Dictionary<string, object>> actionOnInvoke = null)

SimpleStateMachineLibrary/Transitions/Transition.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,12 @@ public Transition OnInvoke(Action<Transition, Dictionary<string, object>> action
4949
return this;
5050
}
5151

52-
internal Transition Invoke(Dictionary<string, object> parameters)
52+
public InvokeParameters Invoke(Dictionary<string, object> parameters)
53+
{
54+
return StateMachine.InvokeTransition(this, parameters);
55+
}
56+
57+
internal Transition Invoking(Dictionary<string, object> parameters)
5358
{
5459
_onInvoke?.Invoke (this, parameters);
5560
this.StateMachine._logger?.LogDebugAndInformation("Invoke transition \"{NameTransition}\"", this.Name);

0 commit comments

Comments
 (0)