fix: 状态机 fsm 包名修复,优化注释
This commit is contained in:
parent
03028b1a41
commit
cee067e246
|
@ -1,38 +0,0 @@
|
||||||
package fms
|
|
||||||
|
|
||||||
type (
|
|
||||||
FSMStateEnterHandle[Data any] func(data Data)
|
|
||||||
FSMStateUpdateHandle[Data any] func(data Data)
|
|
||||||
FSMStateExitHandle[Data any] func(data Data)
|
|
||||||
)
|
|
||||||
|
|
||||||
func NewFSMState[State comparable, Data any](state State, enter FSMStateEnterHandle[Data], update FSMStateUpdateHandle[Data], exit FSMStateExitHandle[Data]) *FSMState[State, Data] {
|
|
||||||
return &FSMState[State, Data]{
|
|
||||||
enter: enter,
|
|
||||||
update: update,
|
|
||||||
exit: exit,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type FSMState[State comparable, Data any] struct {
|
|
||||||
state State
|
|
||||||
enter FSMStateEnterHandle[Data]
|
|
||||||
update FSMStateUpdateHandle[Data]
|
|
||||||
exit FSMStateExitHandle[Data]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (slf *FSMState[State, Data]) GetState() State {
|
|
||||||
return slf.state
|
|
||||||
}
|
|
||||||
|
|
||||||
func (slf *FSMState[State, Data]) Enter(data Data) {
|
|
||||||
slf.enter(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (slf *FSMState[State, Data]) Update(data Data) {
|
|
||||||
slf.update(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (slf *FSMState[State, Data]) Exit(data Data) {
|
|
||||||
slf.exit(data)
|
|
||||||
}
|
|
|
@ -1,40 +1,47 @@
|
||||||
package fms
|
package fsm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// NewFSM 创建一个新的状态机
|
||||||
func NewFSM[State comparable, Data any](data Data) *FSM[State, Data] {
|
func NewFSM[State comparable, Data any](data Data) *FSM[State, Data] {
|
||||||
return &FSM[State, Data]{
|
return &FSM[State, Data]{
|
||||||
states: map[State]*FSMState[State, Data]{},
|
states: map[State]*State[State, Data]{},
|
||||||
data: data,
|
data: data,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FSM 状态机
|
||||||
type FSM[State comparable, Data any] struct {
|
type FSM[State comparable, Data any] struct {
|
||||||
current State
|
current State
|
||||||
data Data
|
data Data
|
||||||
states map[State]*FSMState[State, Data]
|
states map[State]*State[State, Data]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update 触发当前状态
|
||||||
func (slf *FSM[State, Data]) Update() {
|
func (slf *FSM[State, Data]) Update() {
|
||||||
state := slf.states[slf.current]
|
state := slf.states[slf.current]
|
||||||
state.Update(slf.data)
|
state.Update(slf.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (slf *FSM[State, Data]) Register(state *FSMState[State, Data]) {
|
// Register 注册状态
|
||||||
|
func (slf *FSM[State, Data]) Register(state *State[State, Data]) {
|
||||||
slf.states[state.GetState()] = state
|
slf.states[state.GetState()] = state
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unregister 反注册状态
|
||||||
func (slf *FSM[State, Data]) Unregister(state State) {
|
func (slf *FSM[State, Data]) Unregister(state State) {
|
||||||
delete(slf.states, state)
|
delete(slf.states, state)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HasState 检查状态机是否存在特定状态
|
||||||
func (slf *FSM[State, Data]) HasState(state State) bool {
|
func (slf *FSM[State, Data]) HasState(state State) bool {
|
||||||
_, has := slf.states[state]
|
_, has := slf.states[state]
|
||||||
return has
|
return has
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Change 改变状态机状态到新的状态
|
||||||
func (slf *FSM[State, Data]) Change(state State) {
|
func (slf *FSM[State, Data]) Change(state State) {
|
||||||
current := slf.states[slf.current]
|
current := slf.states[slf.current]
|
||||||
current.Exit(slf.data)
|
current.Exit(slf.data)
|
|
@ -0,0 +1,38 @@
|
||||||
|
package fsm
|
||||||
|
|
||||||
|
type (
|
||||||
|
StateEnterHandle[Data any] func(data Data)
|
||||||
|
StateUpdateHandle[Data any] func(data Data)
|
||||||
|
StateExitHandle[Data any] func(data Data)
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewFSMState[S comparable, Data any](state S, enter StateEnterHandle[Data], update StateUpdateHandle[Data], exit StateExitHandle[Data]) *State[S, Data] {
|
||||||
|
return &State[S, Data]{
|
||||||
|
enter: enter,
|
||||||
|
update: update,
|
||||||
|
exit: exit,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type State[S comparable, Data any] struct {
|
||||||
|
state S
|
||||||
|
enter StateEnterHandle[Data]
|
||||||
|
update StateUpdateHandle[Data]
|
||||||
|
exit StateExitHandle[Data]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *State[S, Data]) GetState() S {
|
||||||
|
return slf.state
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *State[S, Data]) Enter(data Data) {
|
||||||
|
slf.enter(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *State[S, Data]) Update(data Data) {
|
||||||
|
slf.update(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *State[S, Data]) Exit(data Data) {
|
||||||
|
slf.exit(data)
|
||||||
|
}
|
Loading…
Reference in New Issue