Skip to content

Commit d6a6a08

Browse files
committed
logging
1 parent ead1d8c commit d6a6a08

21 files changed

+454
-274
lines changed

Examples/Examples.csproj

+20
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

+59
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

+7-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ VisualStudioVersion = 16.0.29806.167
55
MinimumVisualStudioVersion = 10.0.40219.1
66
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", "{F508DC28-A157-49D4-8C65-791FFD6AF719}"
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
@@ -21,6 +23,10 @@ Global
2123
{F508DC28-A157-49D4-8C65-791FFD6AF719}.Debug|Any CPU.Build.0 = Debug|Any CPU
2224
{F508DC28-A157-49D4-8C65-791FFD6AF719}.Release|Any CPU.ActiveCfg = Release|Any CPU
2325
{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

SimpleStateMachineLibrary/Data/Data.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace SimpleStateMachineLibrary
66
{
7-
public partial class Data : NamedObject<Data>
7+
public partial class Data : NamedObject
88
{
99
private object _value;
1010

@@ -22,27 +22,27 @@ public object Value
2222
public Data OnChange(Action<Data, object, object> actionOnChange)
2323
{
2424
_onChange += actionOnChange;
25-
25+
this.StateMachine._logger?.LogDebugAndInformation("Method \"{NameMethod}\" subscribe on change data \"{NameData}\"", actionOnChange.Method.Name, this.Name);
2626
return this;
2727
}
2828

2929
protected internal Data(StateMachine stateMachine, string nameData, object valueData = null) : base(stateMachine, nameData)
3030
{
3131
Value = valueData;
3232

33-
stateMachine._logger?.LogDebug("Create data \"{NameData}\" ", nameData);
33+
stateMachine?._logger?.LogDebug("Create data \"{NameData}\" ", nameData);
3434

35-
stateMachine.AddData(this, true);
35+
stateMachine.AddData(this, out bool result, true);
3636
}
3737

3838
public Data Delete()
3939
{
4040
return this.StateMachine.DeleteData(this);
4141
}
4242

43-
public Data TryDelete()
43+
public Data TryDelete(out bool result)
4444
{
45-
return this.StateMachine.TryDeleteData(this);
45+
return this.StateMachine.TryDeleteData(this, out result);
4646
}
4747
}
4848
}

SimpleStateMachineLibrary/Data/DataWorkWithXML.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public partial class Data
99
{
1010
public static XElement ToXElement(Data data)
1111
{
12-
Check.NamedObject(data);
12+
Check.NamedObject(data, data?.StateMachine?._logger);
1313
XElement element = new XElement("Data");
1414
element.Add(new XAttribute("Name", data.Name));
1515
element.Add(new XAttribute("Value", data.Value.ToString()));
@@ -24,13 +24,13 @@ public XElement ToXElement()
2424

2525
public static Data FromXElement(StateMachine stateMachine, XElement data)
2626
{
27-
stateMachine = Check.Object(stateMachine);
28-
data = Check.Object(data);
27+
stateMachine = Check.Object(stateMachine, stateMachine?._logger);
28+
data = Check.Object(data, stateMachine?._logger);
2929

3030
string Name = data.Attribute("Name")?.Value;
3131
string Value = data.Attribute("Value")?.Value;
3232

33-
stateMachine._logger?.LogDebug("Initialization data \"{NameData}\" from XElement", Name);
33+
stateMachine?._logger?.LogDebug("Initialization data \"{NameData}\" from XElement", Name);
3434
return stateMachine.AddData(Name, Value);
3535
}
3636

0 commit comments

Comments
 (0)