Grumson.Utilities.Fsm
1.0.0
See the version list below for details.
dotnet add package Grumson.Utilities.Fsm --version 1.0.0
NuGet\Install-Package Grumson.Utilities.Fsm -Version 1.0.0
<PackageReference Include="Grumson.Utilities.Fsm" Version="1.0.0" />
paket add Grumson.Utilities.Fsm --version 1.0.0
#r "nuget: Grumson.Utilities.Fsm, 1.0.0"
// Install Grumson.Utilities.Fsm as a Cake Addin #addin nuget:?package=Grumson.Utilities.Fsm&version=1.0.0 // Install Grumson.Utilities.Fsm as a Cake Tool #tool nuget:?package=Grumson.Utilities.Fsm&version=1.0.0
The Fsm is a C# library designed for personal use.
Fsm Project Documentation
Overview
The Fsm (Finite State Machine) project provides a generic implementation of a finite state machine in C#. It is designed to be flexible and reusable for various applications where state management and transitions are crucial. The project consists of two main classes: Fsm<TState, TEvent, TTransition>
and FsmTransition<TState, TTransition>
.
FsmTransition<TState, TTransition>
Description
FsmTransition<TState, TTransition>
represents a transition in the finite state machine. It encapsulates the information about the next state and the transition trigger.
Properties
- NextState: The state to transition to.
- Transition: The trigger for the transition.
Constructors
FsmTransition(TState nextState, TTransition transition)
: Initializes a new instance of theFsmTransition
class with the specified next state and transition trigger.
Fsm<TState, TEvent, TTransition>
Description
Fsm<TState, TEvent, TTransition>
represents the finite state machine itself. It manages states, transitions between them based on events, and notifies about these changes through events.
Properties
- OnTransition: An event that is triggered when a transition occurs.
- OnStateChange: An event that is triggered when the state changes.
Constructors
Fsm(TState initialState, Dictionary<TState, Dictionary<TEvent, FsmTransition<TState, TTransition>>> transitions)
: Initializes a new instance of theFsm
class with the specified initial state and transitions.
Public Methods
- Trigger(TEvent trigger): Triggers a transition based on the specified event. If the transition is valid, it changes the state and notifies about the transition and state change. If the transition is invalid, it throws an
InvalidOperationException
. - GetCurrentState(): Returns the current state of the finite state machine.
Events
- Action<TTransition> OnTransition: Triggered when a transition occurs.
- Action<TState> OnStateChange: Triggered when the state changes.
Usage Example
Below is a simple example of how to use the Fsm project to manage states and transitions:
// Define states and events
enum States { Idle, Running, Stopped }
enum Events { Start, Stop }
// Define transitions
var transitions = new Dictionary<States, Dictionary<Events, FsmTransition<States, Events>>>
{
{ States.Idle, new Dictionary<Events, FsmTransition<States, Events>>
{
{ Events.Start, new FsmTransition<States, Events>(States.Running, Events.Start) }
}
},
{ States.Running, new Dictionary<Events, FsmTransition<States, Events>>
{
{ Events.Stop, new FsmTransition<States, Events>(States.Stopped, Events.Stop) }
}
}
};
// Create the FSM
var fsm = new Fsm<States, Events, Events>(States.Idle, transitions);
// Subscribe to events
fsm.OnTransition += transition => Console.WriteLine($"Transition: {transition}");
fsm.OnStateChange += state => Console.WriteLine($"State changed to: {state}");
// Trigger transitions
fsm.Trigger(Events.Start); // Output: Transition: Start
// State changed to: Running
fsm.Trigger(Events.Stop); // Output: Transition: Stop
// State changed to: Stopped
This documentation provides a basic overview and usage of the Fsm project. For more detailed information, refer to the source code and comments within the Fsm.cs
and FsmTransition.cs
files.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.