Skip to content

Commit ead1d8c

Browse files
committed
logging
1 parent cd78e57 commit ead1d8c

18 files changed

+368
-132
lines changed

SimpleStateMachineLibrary/Data/Data.cs

Lines changed: 4 additions & 1 deletion
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;
34

45
namespace SimpleStateMachineLibrary
@@ -29,6 +30,8 @@ protected internal Data(StateMachine stateMachine, string nameData, object value
2930
{
3031
Value = valueData;
3132

33+
stateMachine._logger?.LogDebug("Create data \"{NameData}\" ", nameData);
34+
3235
stateMachine.AddData(this, true);
3336
}
3437

SimpleStateMachineLibrary/Data/DataWorkWithXML.cs

Lines changed: 6 additions & 5 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

@@ -12,15 +13,13 @@ public static XElement ToXElement(Data data)
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("Data");
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)
@@ -30,6 +29,8 @@ public static Data FromXElement(StateMachine stateMachine, XElement data)
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
}
3536

SimpleStateMachineLibrary/SimpleStateMachineLibrary.csproj

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
</PropertyGroup>
66

77
<ItemGroup>
8-
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.2" />
9-
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.2" />
10-
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.2" />
8+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.2" />
119
</ItemGroup>
1210

1311
</Project>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace SimpleStateMachineLibrary
6+
{
7+
public class InvokeParameters
8+
{
9+
internal InvokeParameters(StateMachine stateMachine)
10+
{
11+
StateMachine = stateMachine;
12+
}
13+
14+
internal StateMachine StateMachine;
15+
}
16+
17+
public static class InvokeParametersExtension
18+
{
19+
public static InvokeParameters AddParameter(this InvokeParameters invokeParameters, string nameParameter, object valueParameter)
20+
{
21+
invokeParameters.StateMachine._nextParameters.Add(nameParameter, valueParameter);
22+
return invokeParameters;
23+
}
24+
25+
public static InvokeParameters AddParameters(this InvokeParameters invokeParameters, Dictionary<string, object> parameters)
26+
{
27+
foreach (var parameter in parameters)
28+
{
29+
invokeParameters.StateMachine._nextParameters.Add(parameter.Key, parameter.Value);
30+
}
31+
32+
return invokeParameters;
33+
}
34+
}
35+
}

SimpleStateMachineLibrary/StateMachines/StateMachine.cs

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,31 @@
22
using System.Xml.Linq;
33
using System;
44
using SimpleStateMachineLibrary.Helpers;
5+
using System.Data.Common;
6+
using System.Linq;
7+
using Microsoft.Extensions.Logging.Abstractions;
8+
using Microsoft.Extensions.Logging;
59

610
namespace SimpleStateMachineLibrary
711
{
812
public partial class StateMachine
913
{
14+
1015
private Dictionary<string, State> _states = new Dictionary<string, State>();
1116

1217
private Dictionary<string, Transition> _transitions = new Dictionary<string, Transition>();
1318

1419
private Dictionary<string, Data> _data = new Dictionary<string, Data>();
1520

21+
internal ILogger _logger;
22+
23+
public ILogger SetILogger(ILogger logger)
24+
{
25+
_logger = logger ?? NullLogger.Instance;
26+
27+
return logger;
28+
}
29+
1630
public State CurrentState { get; private set; }
1731

1832
public State PreviousState { get; private set; }
@@ -21,62 +35,78 @@ public partial class StateMachine
2135

2236
public State StartState { get; private set; }
2337

24-
public StateMachine OnChangeState(Action<State, State> actionOnChangeState)
25-
{
26-
_onChangeState += actionOnChangeState;
27-
28-
return this;
29-
}
3038

31-
public StateMachine()
39+
public StateMachine(ILogger logger=null)
3240
{
33-
41+
SetILogger(logger);
3442
}
3543

36-
public StateMachine(XDocument xDocument)
44+
public StateMachine(XDocument xDocument, ILogger logger = null)
3745
{
46+
SetILogger(logger);
3847
FromXDocument(this, xDocument);
48+
3949
}
4050

41-
public StateMachine(string xDocumentPath)
51+
public StateMachine(string xDocumentPath, ILogger logger = null)
4252
{
53+
SetILogger(logger);
4354
FromXDocument(this, xDocumentPath);
4455
}
4556

46-
private Transition _nextTransition { get; set; }
4757

48-
private Dictionary<string, object> _currentParameters { get; set; }
58+
internal Transition _nextTransition;
4959

50-
private Dictionary<string, object> _nextParameters { get; set; }
60+
internal Dictionary<string, object> _currentParameters;
5161

52-
private Action<State, State> _onChangeState;
62+
internal Dictionary<string, object> _nextParameters;
63+
64+
internal Action<State, State> _onChangeState;
65+
66+
67+
public StateMachine OnChangeState(Action<State, State> actionOnChangeState)
68+
{
69+
_onChangeState += actionOnChangeState;
70+
71+
return this;
72+
}
5373

5474
public State SetStartState(State state)
5575
{
5676
StartState = state;
5777
return state;
5878
}
59-
79+
6080
public State SetStartState(string stateName)
6181
{
6282
StartState = State(stateName);
6383
return StartState;
6484
}
6585

66-
public void InvokeTransition(string nameTransition)
86+
public InvokeParameters InvokeTransition(string nameTransition)
6787
{
6888
_nextTransition = Check.GetElement(_transitions, nameTransition, true);
89+
90+
if(_nextTransition.StateTo!=CurrentState)
91+
{
92+
throw new ArgumentException(message: $"{nameTransition} not available from {CurrentState?.Name} " );
93+
}
94+
95+
return new InvokeParameters(this);
6996
}
7097

71-
public void InvokeTransitionWithParameters(string nameTransition, Dictionary<string, object> parameters)
98+
public InvokeParameters InvokeTransitionWithParameters(string nameTransition, Dictionary<string, object> parameters)
7299
{
73100
InvokeTransition(nameTransition);
74101

75102
_nextParameters = parameters;
103+
104+
return new InvokeParameters(this);
76105
}
77106

78107
private StateMachine InvokeTransition()
79108
{
109+
80110
//Mark nextParameters as current
81111
_currentParameters = _nextParameters;
82112
_nextParameters = null;
@@ -108,6 +138,11 @@ private StateMachine ChangeState()
108138

109139
public void Start(Dictionary<string, object> startParameters = null)
110140
{
141+
if(StartState==null)
142+
{
143+
throw new NullReferenceException(message: "Start state don't set");
144+
}
145+
111146
CurrentState = StartState;
112147
_currentParameters = startParameters;
113148

SimpleStateMachineLibrary/StateMachines/StateMachineWorkWithData.cs

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22

33

4+
using Microsoft.Extensions.Logging;
45
using SimpleStateMachineLibrary.Helpers;
56
using System.Xml.Linq;
67

@@ -11,12 +12,26 @@ public partial class StateMachine
1112

1213
private Data _Data(string nameData, bool exeption)
1314
{
14-
return Check.GetElement(_data, nameData, exeption);
15+
var data_ = Check.GetElement(_data, nameData, exeption);
16+
17+
if (exeption)
18+
_logger?.LogDebug("Get data \"{NameData}\"", nameData);
19+
else
20+
_logger?.LogDebug("Try get data \"{NameData}\"", nameData);
21+
22+
return data_;
1523
}
1624

1725
private Data _Data(Data data, bool exeption)
1826
{
19-
return Check.GetElement(_data, data, exeption);
27+
var data_ = Check.GetElement(_data, data, exeption);
28+
29+
if (exeption)
30+
_logger?.LogDebug("Get data \"{NameData}\"", data.Name);
31+
else
32+
_logger?.LogDebug("Try get data \"{NameData}\"", data.Name);
33+
34+
return data_;
2035
}
2136

2237
public Data Data(string nameData)
@@ -49,6 +64,12 @@ internal Data AddData(Data data, bool exeption)
4964
return null;
5065

5166
_data.Add(data.Name, data);
67+
68+
if (exeption)
69+
_logger?.LogDebug("Add data \"{NameData}\"", data.Name);
70+
else
71+
_logger?.LogDebug("Try add data \"{NameData}\"", data.Name);
72+
5273
return data;
5374
}
5475

@@ -69,12 +90,27 @@ public Data AddData(XElement xElement)
6990

7091
private Data _DeleteData(Data data, bool exeption)
7192
{
72-
return Check.Remove(_data, data, exeption);
93+
var data_ = Check.Remove(_data, data, exeption);
94+
95+
if (exeption)
96+
_logger?.LogDebug("Delete data \"{NameData}\"", data.Name);
97+
else
98+
_logger?.LogDebug("Try delete data \"{NameData}\"", data.Name);
99+
100+
return data_;
73101
}
74102

75103
private Data _DeleteData(string dataName, bool exeption)
76104
{
77-
return Check.Remove(_data, dataName, exeption);
105+
var data_ = Check.Remove(_data, dataName, exeption);
106+
107+
if (exeption)
108+
_logger?.LogDebug("Delete data \"{NameData}\"", dataName);
109+
else
110+
_logger?.LogDebug("Try delete data \"{NameData}\"", dataName);
111+
112+
113+
return data_;
78114
}
79115

80116
public Data DeleteData(string nameData)

0 commit comments

Comments
 (0)