在编程中经常会碰到根据当前的状态和到来的事件(ex:key event ,packet 到来)来执行不同的动作,使用有限状态机编程是一种非常简洁明了的方式。该种方式大概的思想是:状态机FSM会维护某种状态(stateful protocol ),根据到来的事件和当前FSM 处于的状态,FSM 会做出不同的响应并切换到下一状态(或保持当前状态),从而实现相应的业务逻辑。
比如你正在床上睡觉(state:sleep),这是闹铃响了(event:alarm ring),你会处于朦胧状态(state:drowsy),等过了5分钟,你的潜意思或者生物钟会告诉你瞌睡5分钟(event:5mins passed)了,这时候你才不情愿的起床(state:actived),然后就是后面的类似的种种事件到来和state切换。
举一个实际的例子并附上代码:
这是一段封包解析代码段,诸如TCP,UART,RFCOM这些应用程数据,因为存在了封包的切割,应用端收到的数据可能不是每每都是完整的封包,所以需要记录封包parsing 的状态并做相应的处理从而组成一笔完整的封包。
该case中这样定义协议: Binary data is read from the data stream using the following binary specification (transport
packet header). Each field is stored as Big Endian.