Skip to content

Commit 50c0694

Browse files
committed
Merge branch 'develop'
2 parents 48fa517 + 3eb680e commit 50c0694

25 files changed

+967
-561
lines changed

Examples/Examples.csproj

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp3.1</TargetFramework>
6+
</PropertyGroup>
7+
8+
<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+
</ItemGroup>
13+
14+
<ItemGroup>
15+
<Reference Include="SimpleStateMachineLibrary">
16+
<HintPath>..\SimpleStateMachineLibrary\bin\Debug\netstandard2.1\SimpleStateMachineLibrary.dll</HintPath>
17+
</Reference>
18+
</ItemGroup>
19+
20+
</Project>

Examples/Program.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Microsoft.Extensions.Logging;
4+
using SimpleStateMachineLibrary;
5+
6+
namespace Examples
7+
{
8+
class Program
9+
{
10+
static void Method1(State state, Dictionary<string, object> parameters)
11+
{
12+
state.StateMachine.InvokeTransition("Transition1");
13+
}
14+
static void Method2(State state, Dictionary<string, object> parameters)
15+
{
16+
state.StateMachine.InvokeTransition("Transition2");
17+
}
18+
static void Method3(State state, Dictionary<string, object> parameters)
19+
{
20+
state.StateMachine.InvokeTransition("Transition3");
21+
}
22+
static void Method4(State state, Dictionary<string, object> parameters)
23+
{
24+
25+
}
26+
27+
static Dictionary<string, object> parametersForStart = new Dictionary<string, object>() { { "Data1", "Test Data" } };
28+
29+
static void Main(string[] args)
30+
{
31+
var loggerFactory = LoggerFactory.Create(builder => { builder.AddConsole().AddDebug().SetMinimumLevel(LogLevel.Debug); });
32+
var logger = loggerFactory.CreateLogger<StateMachine>();
33+
StateMachine stateMachine = new StateMachine(logger);
34+
35+
State state1 = stateMachine.AddState("State1");
36+
State state2 = stateMachine.AddState("State2");
37+
State state3 = stateMachine.AddState("State3");
38+
State state4 = stateMachine.AddState("State4");
39+
40+
Transition transition1 = state1.AddTransitionFromThis("Transition1", state2);
41+
Transition transition2 = stateMachine.AddTransition("Transition2", state2, state3);
42+
Transition transition3 = state4.AddTransitionToThis("Transition3", state3);
43+
44+
state1.SetAsStartState();
45+
state1.OnExit(Method1);
46+
state2.OnExit(Method2);
47+
state3.OnExit(Method3);
48+
state4.OnExit(Method4);
49+
50+
stateMachine.AddData("int1", 55);
51+
stateMachine.AddData("string1", "Roman");
52+
stateMachine.AddData("double1", 1001.0005);
53+
54+
stateMachine.Start(parametersForStart);
55+
56+
stateMachine.ToXDocument("text.xml");
57+
}
58+
}
59+
}

SimpleStateMachineLibrary.sln

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio Version 16
44
VisualStudioVersion = 16.0.29806.167
55
MinimumVisualStudioVersion = 10.0.40219.1
6-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleStateMachineLibrary", "SimpleStateMachineLibrary\SimpleStateMachineLibrary.csproj", "{047A9390-803D-4964-B512-546D19B62066}"
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleStateMachineLibrary", "SimpleStateMachineLibrary\SimpleStateMachineLibrary.csproj", "{047A9390-803D-4964-B512-546D19B62066}"
77
EndProject
8-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{7EE69DED-8322-4467-89E3-692CC55F2503}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj", "{F508DC28-A157-49D4-8C65-791FFD6AF719}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Examples", "Examples\Examples.csproj", "{032759D0-1C07-4996-BB9E-4A187D7D8F73}"
911
EndProject
1012
Global
1113
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -17,10 +19,14 @@ Global
1719
{047A9390-803D-4964-B512-546D19B62066}.Debug|Any CPU.Build.0 = Debug|Any CPU
1820
{047A9390-803D-4964-B512-546D19B62066}.Release|Any CPU.ActiveCfg = Release|Any CPU
1921
{047A9390-803D-4964-B512-546D19B62066}.Release|Any CPU.Build.0 = Release|Any CPU
20-
{7EE69DED-8322-4467-89E3-692CC55F2503}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21-
{7EE69DED-8322-4467-89E3-692CC55F2503}.Debug|Any CPU.Build.0 = Debug|Any CPU
22-
{7EE69DED-8322-4467-89E3-692CC55F2503}.Release|Any CPU.ActiveCfg = Release|Any CPU
23-
{7EE69DED-8322-4467-89E3-692CC55F2503}.Release|Any CPU.Build.0 = Release|Any CPU
22+
{F508DC28-A157-49D4-8C65-791FFD6AF719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23+
{F508DC28-A157-49D4-8C65-791FFD6AF719}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{F508DC28-A157-49D4-8C65-791FFD6AF719}.Release|Any CPU.ActiveCfg = Release|Any CPU
25+
{F508DC28-A157-49D4-8C65-791FFD6AF719}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{032759D0-1C07-4996-BB9E-4A187D7D8F73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{032759D0-1C07-4996-BB9E-4A187D7D8F73}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{032759D0-1C07-4996-BB9E-4A187D7D8F73}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{032759D0-1C07-4996-BB9E-4A187D7D8F73}.Release|Any CPU.Build.0 = Release|Any CPU
2430
EndGlobalSection
2531
GlobalSection(SolutionProperties) = preSolution
2632
HideSolutionNode = FALSE
Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,48 @@
1-
using SimpleStateMachineLibrary.Helpers;
1+
using Microsoft.Extensions.Logging;
2+
using SimpleStateMachineLibrary.Helpers;
3+
using System;
24

35
namespace SimpleStateMachineLibrary
46
{
57
public partial class Data : NamedObject
68
{
7-
public object Value { get; set; }
9+
private object _value;
810

9-
public Data(StateMachine stateMachine, string nameData, object valueData = null) : base(stateMachine, nameData)
11+
public object Value
12+
{ get { return _value; }
13+
set
14+
{
15+
_onChange?.Invoke(this, value, value);
16+
_value = value;
17+
}
18+
}
19+
20+
private Action<Data, object, object> _onChange;
21+
22+
public Data OnChange(Action<Data, object, object> actionOnChange)
23+
{
24+
_onChange += actionOnChange;
25+
this.StateMachine._logger?.LogDebugAndInformation("Method \"{NameMethod}\" subscribe on change data \"{NameData}\"", actionOnChange.Method.Name, this.Name);
26+
return this;
27+
}
28+
29+
protected internal Data(StateMachine stateMachine, string nameData, object valueData = null) : base(stateMachine, nameData)
1030
{
1131
Value = valueData;
32+
33+
stateMachine?._logger?.LogDebug("Create data \"{NameData}\" ", nameData);
34+
35+
stateMachine.AddData(this, out bool result, true);
1236
}
1337

1438
public Data Delete()
1539
{
1640
return this.StateMachine.DeleteData(this);
1741
}
1842

19-
public Data TryDelete()
43+
public Data TryDelete(out bool result)
2044
{
21-
return this.StateMachine.TryDeleteData(this);
45+
return this.StateMachine.TryDeleteData(this, out result);
2246
}
2347
}
2448
}
Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using SimpleStateMachineLibrary.Helpers;
1+
using Microsoft.Extensions.Logging;
2+
using SimpleStateMachineLibrary.Helpers;
23
using System.Xml.Linq;
34

45

@@ -8,29 +9,30 @@ public partial class Data
89
{
910
public static XElement ToXElement(Data data)
1011
{
11-
Check.NamedObject(data);
12+
Check.NamedObject(data, data?.StateMachine?._logger);
1213
XElement element = new XElement("Data");
1314
element.Add(new XAttribute("Name", data.Name));
1415
element.Add(new XAttribute("Value", data.Value.ToString()));
16+
data.StateMachine._logger?.LogDebug("Data \"{NameData}\" to XElement", data.Name);
1517
return element;
1618
}
1719

1820
public XElement ToXElement()
1921
{
20-
XElement element = new XElement("Transition");
21-
element.Add(new XAttribute("Name", this.Name));
22-
element.Add(new XAttribute("Value", this.Value.ToString()));
23-
return element;
22+
return Data.ToXElement(this);
2423
}
2524

2625
public static Data FromXElement(StateMachine stateMachine, XElement data)
2726
{
28-
stateMachine = Check.Object(stateMachine);
29-
data = Check.Object(data);
27+
stateMachine = Check.Object(stateMachine, stateMachine?._logger);
28+
data = Check.Object(data, stateMachine?._logger);
3029

3130
string Name = data.Attribute("Name")?.Value;
3231
string Value = data.Attribute("Value")?.Value;
32+
33+
stateMachine?._logger?.LogDebug("Initialization data \"{NameData}\" from XElement", Name);
3334
return stateMachine.AddData(Name, Value);
3435
}
36+
3537
}
3638
}

0 commit comments

Comments
 (0)