Skip to content

Commit 09b99c2

Browse files
committed
merge
2 parents 1b37b43 + d780053 commit 09b99c2

12 files changed

+528
-26
lines changed

CodeMap1.dgml

+463
Large diffs are not rendered by default.

Examples/Examples.csproj

+10-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,16 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.2" />
10-
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.2" />
11-
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.2" />
12-
<PackageReference Include="SimpleStateMachineLibrary" Version="1.2.0" />
9+
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.4" />
10+
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.4" />
11+
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.4" />
12+
<PackageReference Include="SimpleStateMachineLibrary" Version="2.0.1" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<Reference Include="SimpleStateMachineLibrary">
17+
<HintPath>..\SimpleStateMachineLibrary\bin\Release\netstandard2.1\SimpleStateMachineLibrary.dll</HintPath>
18+
</Reference>
1319
</ItemGroup>
1420

1521
</Project>

README.md

+11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# SimpleStateMachineLibrary [![NuGet Pre Release](https://img.shields.io/nuget/vpre/SimpleStateMachineLibrary.svg)](https://www.nuget.org/packages/SimpleStateMachineLibrary)
22
A C# library for realization simple state-machine on .Net
3+
# Why SimpleStateMachine?
4+
Create state machine in **two steps** :
5+
1. Create scheme in [node editor](https://github.com/SimpleStateMachine/SimpleStateMachineNodeEditor) ♦️
6+
2. Load scheme in your project using [library](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary)📑
7+
8+
Just describe your app logic and run the state machine🚀
9+
310
## Give a Star! :star:
411
If you like or are using this project please give it a star. Thanks!
512
## Сontent
@@ -86,24 +93,28 @@ Useful extensions for work:
8693
```
8794
## Documentation
8895
* StateMachine
96+
* [Create](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/StateMachine#Create)
8997
* [Import](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/StateMachine#Import)
9098
* [Export](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/StateMachine#Export)
9199
* [Logging](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/StateMachine#Logging)
92100
* State
93101
* [Create](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/State#Create)
94102
* [Get](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/State#Get)
103+
* [Exists](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/State#Exists)
95104
* [Delete](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/State#Delete)
96105
* [Entry](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/State#Entry)
97106
* [Exit](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/State#Exit)
98107
* Transition
99108
* [Create](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Transition#Create)
100109
* [Get](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Transition#Get)
110+
* [Exists](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Transition#Exists)
101111
* [Delete](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Transition#Delete)
102112
* [Invoke](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Transition#Invoke)
103113
* [Parameters](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Transition#Parameters)
104114
* Data
105115
* [Create](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Data#Create)
106116
* [Get](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Data#Get)
117+
* [Exists](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Data#Exists)
107118
* [Delete](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Data#Delete)
108119
* [Change](https://github.com/SimpleStateMachine/SimpleStateMachineLibrary/wiki/Data#Change)
109120
## License
5.66 KB
Loading

SimpleStateMachineLibrary/SimpleStateMachineLibrary.csproj

+11-8
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.1;netstandard2.0</TargetFrameworks>
4+
<TargetFramework>netstandard2.0</TargetFramework>
55
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
66
<Authors>SimpleStateMachine</Authors>
77
<RepositoryUrl>https://github.com/SimpleStateMachine/SimpleStateMachineLibrary</RepositoryUrl>
88
<PackageLicenseFile></PackageLicenseFile>
99
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1010
<PackageTags>statemachine state-machine finite-state-machine</PackageTags>
1111
<PackageProjectUrl>https://github.com/SimpleStateMachine/SimpleStateMachineLibrary</PackageProjectUrl>
12-
<Version>1.0.1.</Version>
12+
<Version>2.0.1.0</Version>
1313
<Description>Library for SimpleStateMachine</Description>
14-
<PackageIcon>logo.jpg</PackageIcon>
15-
<AssemblyVersion>1.0.1.0</AssemblyVersion>
16-
<FileVersion>1.0.1.0</FileVersion>
14+
<PackageIcon>SimpleStateMachine.png</PackageIcon>
15+
<AssemblyVersion>2.0.1.0</AssemblyVersion>
16+
<FileVersion>2.0.1.0</FileVersion>
17+
<PackageReleaseNotes>Add methods for check on exists
18+
Update package: Microsoft.Extensions.Logging.Abstractions
19+
Some fix</PackageReleaseNotes>
1720
</PropertyGroup>
1821

1922
<ItemGroup>
20-
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.2" />
23+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.4" />
2124
</ItemGroup>
2225

2326
<ItemGroup>
24-
<None Include="logo.jpg">
27+
<None Include="SimpleStateMachine.png">
2528
<Pack>True</Pack>
2629
<PackagePath></PackagePath>
2730
</None>

SimpleStateMachineLibrary/StateMachines/StateMachine.cs

+9-4
Original file line numberDiff line numberDiff line change
@@ -158,16 +158,21 @@ private StateMachine ChangeState()
158158
return this;
159159
}
160160

161-
public void Start(Dictionary<string, object> startParameters = null)
162-
{
163-
if(StartState==null)
161+
private void CheckStartState()
162+
{
163+
if (StartState == null)
164164
{
165165
string message = "Start state not set";
166166
var exception = new NullReferenceException(message: message);
167167
_logger?.LogError(exception, message);
168168
throw exception;
169-
169+
170170
}
171+
}
172+
173+
public void Start(Dictionary<string, object> startParameters = null)
174+
{
175+
CheckStartState();
171176

172177
_logger?.LogDebugAndInformation("Start work state machine");
173178

SimpleStateMachineLibrary/StateMachines/StateMachineWorkWithData.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ internal Data _GetData(string nameData, out bool result, bool exception)
3131

3232
// return data_;
3333
//}
34-
34+
public bool DataExists(string nameData)
35+
{
36+
return Check.Contains(_data, nameData, this._logger, false);
37+
}
3538

3639
public Data GetData(string nameData)
3740
{

SimpleStateMachineLibrary/StateMachines/StateMachineWorkWithStates.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ internal State _GetState(string nameState, out bool result, bool exception)
3333

3434
// return _state;
3535
//}
36-
36+
public bool StateExists(string nameState)
37+
{
38+
return Check.Contains(_states, nameState, this._logger, false);
39+
}
3740

3841
public State GetState(string nameState)
3942
{

SimpleStateMachineLibrary/StateMachines/StateMachineWorkWithTransitions.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,15 @@ internal Transition _GetTransition(string nameTransition, out bool result, bool
3333
return _transition;
3434
}
3535

36+
public bool TransitionExists(string nameTransition)
37+
{
38+
return Check.Contains(_transitions, nameTransition, this._logger, false);
39+
}
3640

3741
public Transition GetTransition(string nameTransition)
3842
{
3943
return _GetTransition(nameTransition, out bool result, true);
40-
}
44+
}
4145

4246
public Transition TryGetTransition(string nameTransition, out bool result)
4347
{
@@ -52,6 +56,8 @@ public Transition TryGetTransition(string nameTransition, out bool result)
5256

5357

5458

59+
60+
5561
internal Transition _AddTransition(string nameTransition, State stateFrom, State stateTo, Action<Transition, Dictionary<string, object>> actionOnInvoke, out bool result, bool exception)
5662
{
5763
//throw that element already contains

SimpleStateMachineLibrary/StateMachines/StateMachineWorkWithTransitionsForState.cs

-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ private Dictionary<string, Transition> GetTransitionsFromState(State state, out
2626
return transitionsFromState;
2727
}
2828

29-
3029
public Dictionary<string, Transition> GetTransitionsFromState(string stateName)
3130
{
3231
return GetTransitionsFromState(stateName, out bool result, true);
@@ -67,7 +66,6 @@ private Dictionary<string, Transition> GetTransitionsToState(State state, out bo
6766
return transitionsToState;
6867
}
6968

70-
7169
public Dictionary<string, Transition> GetTransitionsToState(string stateName)
7270
{
7371
return GetTransitionsToState(stateName, out bool result, true);

SimpleStateMachineLibrary/StateMachines/StateMachineWorkWithXML.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ private static XDocument ToXDocument(StateMachine stateMachine, string nameFile)
3838
transitions.Add(transition.Value.ToXElement());
3939
}
4040

41-
XElement datas = new XElement("Data");
41+
XElement datas = new XElement("DATA");
4242
stateMachineXElement.Add(datas);
4343

4444
foreach (var data in stateMachine._data)
@@ -70,7 +70,7 @@ private static StateMachine FromXDocument(StateMachine stateMachine, XDocument x
7070
var Transitions = stateMachineXElement.Element("Transitions")?.Elements()?.ToList();
7171
Transitions?.ForEach(x => stateMachine.AddTransition(x));
7272

73-
var Datas = stateMachineXElement.Element("Data")?.Elements()?.ToList();
73+
var Datas = stateMachineXElement.Element("DATA")?.Elements()?.ToList();
7474
Datas?.ForEach(x => stateMachine.AddData(x));
7575
stateMachine?._logger?.LogDebug("StateMachine from XDocument");
7676
return stateMachine;

Tests/StateMachineUnitTests.cs

+7-3
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,15 @@ public void StateMachineFromCode()
4949
State state3 = stateMachine.AddState("State3");
5050
State state4 = stateMachine.AddState("State4");
5151

52-
state1.Delete();
53-
state1.TryDelete(out bool result);
52+
Assert.IsTrue(stateMachine.StateExists("State1"));
5453

5554
stateMachine.OnChangeState(ActionOnChangeState);
5655

5756
Transition transition1 = state1.AddTransitionFromThis("Transition1", state2);
5857
Transition transition2 = stateMachine.AddTransition("Transition2", state2, state3);
5958
Transition transition3 = state4.AddTransitionToThis("Transition3", state3);
6059

61-
60+
Assert.IsTrue(stateMachine.TransitionExists("Transition1"));
6261

6362
state1.SetAsStartState();
6463
state1.OnExit(Method1);
@@ -69,6 +68,8 @@ public void StateMachineFromCode()
6968
stateMachine.AddData("string1", "Roman");
7069
stateMachine.AddData("double1", 1001.0005);
7170

71+
Assert.IsTrue(stateMachine.DataExists("int1"));
72+
7273
stateMachine.Start(parametersForStart);
7374

7475
Assert.AreEqual(stateMachine.CurrentState.Name, "State4");
@@ -81,6 +82,9 @@ public void StateMachineFromXML()
8182
{
8283
var loggerFactory = LoggerFactory.Create(builder => { builder.AddConsole().AddDebug().SetMinimumLevel(LogLevel.Debug); });
8384
var logger = loggerFactory.CreateLogger<StateMachine>();
85+
86+
87+
8488
StateMachine stateMachine = StateMachine.FromXDocument("text.xml", logger);
8589

8690
stateMachine.GetState("State1").OnExit(Method1);

0 commit comments

Comments
 (0)