一:Doubango的状态机--FSM

      对于FSM的所有状态和使用将使得对于Doubango更能很好的实现裁剪和使用。状态(state),还事件(action),对事件的处理(exec)。主要的代码在tsk_fsm.c/h中,tinySAK

二:FSM的常用结构体

三:FSM的建立过程和代码实现

3.1 FSM的使用的建立过程和调用的API

   1、调用tsk_fsm_create创建一个状态机,两个参数分别是起始状态(current)和结束状态(term)。

   2、调用tsk_fsm_set_callback_terminated来设置callback_term和callback_data.

   3、调用tsk_fsm_set来初始化fsm。这一步设置fsm_entrys,查看一下TSK_FSM_ADD宏还有调用的地方,看看如何使用的。

   4、至此状态机初始化完成,之后调用tsk_fsm_act来为fsm输入事件和数据。

3.2 FSM的建立的TEST的程序

从测试的代码中可以看出,总共有四个步骤:创建,设置和最后act。具体的状态机待续。

3.3 FSM的使用总结

     FSM的使用就像开始说的一样,是整个的Doubango的裁剪和使用的关键。原因在于:所有的细节处理都是在FSM的设置里面。首先将需要设置的action的整个处理状态所对应的函数接口申请一个entry的结构体,里面包含了所有的from,cond(此处的cond在doubango中都是cond_always的,即每次都是能够从from  to to ), to, action,在处理的过程中判断一些是否需要处理当前状态,即每个状态机都有一个terminate status。从而实现SIP 的各个register event的处理和使用。附上总结的流程图,具体的可以找一下register的先注册fsm的entry,将挂在传输层的entry list中,然后再调用fsm act时根据action具体处理相应的事件。

学好FSM 真的是能够从整体上感知到Doubango的整体的处理流程。



Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐