http://github.com/looplab/fsm
定义状态机的时候有三部分组成:状态机的初始状态,状态机的事
件(包括了多个源事件和一个目的事件),状态机的事件回调。整体来说,回
调可以分为四组8个回调,按执行顺序依次为:
1,事件开始之前
A,before_xxx,特定的状态之前
B,before_event所有状态之前
2,离开老状态
A,leave_xxx 离开特定状态
B,leave_state 离开所有状态
3,进入新状态
A,enter_xxx,进入特定状态
B,enter_state 进入所有状态
4,事件执行完毕之后
A,after_xxx 进入特定状态之后
B,after_event 进入所有状态
状态机实现的函数接口有:
1 2 3 4 5 6 7 8 9 10 func (f *FSM) AvailableTransitions () []string func (f *FSM) Can (event string ) bool func (f *FSM) Cannot (event string ) bool func (f *FSM) Current () string func (f *FSM) Event (event string , args ...interface {}) error func (f *FSM) Is (state s/ring) bool func (f *FSM) Metadata (key string ) (interface {}, bool ) func (f *FSM) SetMetadata (key string , dataValue interface {}) func (f *FSM) SetState (state string ) func (f *FSM) Transition () error
例如:
1 2 3 func (f *FSM) Can (event string ) bool _, ok := f.transitions[eKey{event, f.current}] return ok && (f.transition == nil )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 func (f *FSM) Event (event string , args ...interface {}) error { e := &Event{f, event, f.current, dst, nil , args, false , false } err := f.beforeEventCallbacks(e) f.transition = func () { f.enterStateCallbacks(e) f.afterEventCallbacks(e) } f.leaveStateCallbacks(e) err = f.doTransition() } func (f *FSM) enterStateCallbacks (e *Event) { if fn, ok := f.callbacks[cKey{f.current, callbackEnterState}]; ok { fn(e) } if fn, ok := f.callbacks[cKey{"" , callbackEnterState}]; ok { fn(e) } }
1 2 3 4 5 6 7 func (f *FSM) Transition () error { return f.doTransition() } func (f *FSM) doTransition () error { return f.transitionerObj.transition(f) }
未找到相关的 Issues 进行评论
请联系 @WillZhuang 初始化创建