类的使用
cn.wjybxx.btree.fsm.StateMachineTask
使用StateMachineTask的程序包
-
cn.wjybxx.btree中StateMachineTask的使用
修饰符和类型方法说明final StateMachineTask<T> TaskEntry.getRootStateMachine()获取根状态机 状态机太重要了,值得我们为其提供各种快捷方法 -
cn.wjybxx.btree.fsm中StateMachineTask的使用
修饰符和类型方法说明static <T> StateMachineTask<T> StateMachineTask.findStateMachine(Task<T> task) 查找task最近的状态机节点 1.仅递归查询父节点和长兄节点 2.优先查找附近的,然后测试长兄节点 - 状态机作为第一个节点的情况比较常见static <T> StateMachineTask<T> StateMachineTask.findStateMachine(Task<T> task, String name) 查找task最近的状态机节点 1.名字不为空的情况下,支持从兄弟节点中查询 2.优先测试父节点,然后测试兄弟节点参数类型为StateMachineTask的cn.wjybxx.btree.fsm中的方法修饰符和类型方法说明voidStateMachineHandler.beforeChangeState(StateMachineTask<T> stateMachineTask, Task<T> curState, Task<T> nextState) 该方法在进入新状态前调用 1.两个参数最多一个为null 2.可以设置新状态的黑板和其它数据 3.用户此时可为新状态分配上下文(黑板、取消令牌、共享属性);同时清理前一个状态的上下文 4.用户此时可拿到新状态ChangeStateArgs,后续则不可 5.如果task需要感知redo和undo,则由用户将信息写入黑板final voidStateMachineHandlers.RedoHandler.beforeChangeState(StateMachineTask<T> stateMachineTask, Task<T> curState, Task<T> nextState) default voidStateMachineHandler.beforeEnter(StateMachineTask<T> stateMachineTask) handler可能也有需要初始化的数据。final voidStateMachineHandlers.RedoHandler.beforeEnter(StateMachineTask<T> stateMachineTask) default intStateMachineHandler.onChildCompleted(StateMachineTask<T> stateMachineTask, Task<T> curState) 该方法在当前状态正常结束(非stop结束)时调用final intStateMachineHandlers.RedoHandler.onChildCompleted(StateMachineTask<T> stateMachineTask, Task<T> curState) default booleanStateMachineHandler.onNextStateAbsent(StateMachineTask<T> stateMachineTask, Task<T> preState) 当状态机没有下一个状态时调用该方法,以避免无可用状态 注意: 1.状态机启动时不会调用该方法 2.如果该方法返回后仍无可用状态,将触发无状态逻辑booleanStateMachineHandlers.RedoHandler.onNextStateAbsent(StateMachineTask<T> stateMachineTask, Task<T> preState) default voidStateMachineHandler.resetForRestart(StateMachineTask<T> stateMachineTask) handler可能也有需要重置的数据。final voidStateMachineHandlers.RedoHandler.resetForRestart(StateMachineTask<T> stateMachineTask)