Giter VIP home page Giter VIP logo

fsm-go's Introduction

fsm-go

Golang finite-state machine.

Examples

Comprehensive

In this example we do the following:

  • utilize a back-reference to our state maching using MachineProvider;
  • use Expiring state handler to timeout a state;
  • create custom state handlers that print the states and terminate the app;
  • join the handlers using Compose.

Simple

In this example we start with stInit, and then send evInitialized, which switches the state into stFinal.

const (
	stInit        fsm.StateType = "stInit"
	stFinal       fsm.StateType = "stFinal"
	evInitialized fsm.EventType = "evInitialized"
)

transitions := fsm.Transitions{
	fsm.When(stInit, evInitialized): stFinal,
}

fsm := fsm.New(stInit, transitions, nil, nil)
fsm.Send(evInitialized)

Expiring states

In this example we use an Expiring state handler, which sends events to the FSM with a delay. Since timer events are asynchronous, we recommend to use the asynchronous FSM implementation.

const (
	stInit         StateType = "stInit"
	stWaitTimeout  StateType = "stWaitTimeout"
	stFinal        StateType = "stFinal"
	evInitialized  EventType = "evInitialized"
	evTimeout      EventType = "evTimeout"
)

transitions := Transitions{
	When(stInit, evInitialized):    stWaitTimeout,
	When(stWaitTimeout, evTimeout): stFinal,
}

provider := new(MachineProvider)

states := States{
	stWaitTimeout: NewExpiring(provider, After(time.Second), evTimeout),
}

fsm := fsm.NewAsync(stInit, transitions, states, nil)
provider.Set(fsm)
fsm.Send(evInitialized)
fsm.Run()

fsm-go's People

Contributors

yarcat avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.