etsm 0.5.0

dotnet add package etsm --version 0.5.0
NuGet\Install-Package etsm -Version 0.5.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="etsm" Version="0.5.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add etsm --version 0.5.0
#r "nuget: etsm, 0.5.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install etsm as a Cake Addin
#addin nuget:?package=etsm&version=0.5.0

// Install etsm as a Cake Tool
#tool nuget:?package=etsm&version=0.5.0

MIT licensed NuGet

c# etsm

Tiny state machine for c#, see etsm

Description

Implement a bare bones state machine in many languages. This library aim to be simple as possible and support only basic features:

  • states on object (owner)
  • optional enter/exit methods
  • virtual state user methods
  • is in
  • unrestricted transitions
  • no runtime allocation

Install

Edit your vcproj and add:

  <ItemGroup>
    <PackageReference Include="etsm" Version="x.y.z" />
  </ItemGroup>

latest version: NuGet

Or

Add this file directly into your project: etsm

Example

Simple

Declare state machine and state in your class

    public class Foo
    {
        private StateMachine<State> stateMachine;
        private State stateA;
        private State stateB;
    ...

Create them in the constructor and bind enter/exit

        public Foo()
        {
            stateMachine = new StateMachine<State>();
            stateA = new State(EnterA, ExitA);
            stateB = new State(EnterB, null);
        }

Make your callback methods

        void EnterA()
        {
            System.Console.Write(" ->A ");
        }

        void ExitA()
        {
            System.Console.Write(" A-> ");
        }

        void EnterB()
        {
            System.Console.Write(" ->B ");
        }

Execute transitions

        public void Run()
        {
            stateMachine.Transition(stateA);
            stateMachine.Transition(stateB);
            stateMachine.Transition(null);
        }

Output: " →A A-> →B "
Sample: ab

Virtual State Methods

    // Define your own state and add Run Action.
    public class State : Etsm.State
    {
        public Action Run { get; private set; }

        public State(Action enter, Action exit, Action run = null)
            : base(enter, exit)
        {
            Run = run;
        }
    }

    public class Foo
    {
        private StateMachine<State> stateMachine;
        private State stateA;
        private State stateB;

        public Foo()
        {
            stateMachine = new StateMachine<State>();
            stateA = new State(null, null, RunA);
            stateB = new State(null, null, RunB);
        }

        private void RunA()
        {
            Console.Write(" A ");
        }

        private void RunB()
        {
            Console.Write(" B ");
        }

        // call run on the current state
        private void Run()
        {
            stateMachine.CurrentState?.Run?.Invoke();
        }

        public void Test()
        {
            stateMachine.Transition(stateA);
            Run();
            stateMachine.Transition(stateB);
            Run();
        }
    }

Output: " A B "
Sample: virtual_call

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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. 
.NET Core netcoreapp3.1 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETCoreApp 3.1

    • 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.

Version Downloads Last updated
0.5.0 447 5/26/2022
0.1.4 428 5/25/2022
0.1.3 412 5/25/2022
0.1.2 418 5/24/2022
0.1.1 419 5/24/2022
0.1.0 425 5/24/2022
0.0.1 453 5/24/2022