字典类型,键是动作名称,值是动作转换映射字典ActionTransitions,用来描述当一个动作被触发时
状态机应该如何从源状态转换到目标状态。
字典类型,键是一个或多个(tuple容器)源状态,值是一个包含多个目标转换配置ToDestConfig的列表,用来描述在当前状态属于
这些源状态时,触发动作后应该如何转换到目标状态。
每个状态转换的动作触发的结果会被自动保存。
该列表以第一个conditions为None的配置为界,划分为最多4个部分:
- 成功+额外条件:前半部分所有
conditions不为None的配置,当动作执行成功时,这些配置会被依次检查,直到找到第一个满足条件的配置并执行转换。 - 仅成功:即第一个条件为
None的配置,当动作执行成功时,如果没有任何前面的额外条件配置被满足,则会执行该转换。 - 失败+额外条件:后半部分所有配置(除了最后一个),当动作执行失败时,这些配置会被依次检查,直到找到第一个满足条件的配置并执行转换。
- 仅失败:即最后一个配置,当动作执行失败时,如果没有任何前面的失败额外条件配置被满足,则会执行该转换。当只有一个条件为
None的配置时,没有该配置。
配置类,包含目标状态、转换条件、各种回调函数等配置选项。
当任何一个动作被触发时,都会进入prepare_event回调中进行预处理。该函数会根据当前的动作名称依次获取如下动作函数并执行:
- prepare_event_before
- prepare_event
- prepare_event_after
只有当这些函数全部返回成功时,才认为动作执行成功,否则认为动作执行失败。其中通常将动作对应的方法注册为prepare_event类型。
当动作回调执行结束后,状态机会根据动作名称从action_transitions中找到对应的ActionTransitions,然后根据当前状态
从ActionTransitions中找到对应的源状态,获取在当前动作和当前状态下的所有目标转换配置ToDestConfig,并依次根据前述动作是否执行成功进行判断。若某一个配置的条件被满足,则完成状态转换,并执行该配置中的各种回调函数。如果没有任何配置的条件被满足,则不会进行状态转换,并会打印一个动作失败的日志。