网络编程状态机的实现-宏定义

状态机最简单的实现就是使用大量的switch case或者是if else,对不同的状态分别处理。

这样的代码比较直观,但是项目逐渐变大时就让人不爽了。

 

另外的一种实现方式是定义一个散列表,维护状态和实现。

例如,魔兽世界的开源代码就是使用了这种方式。维护了消息类型和回调函数指针的一个数组。

 

还有一种方式是设计模式中的状态模式。不过,是不是该计算一下,状态不断增加后,将会有多少个State的派生类。

 

最后一种使用宏定义实现的比较直观。

 

看来wtl的源码,我用宏写了一个类似的小例子。

虽然和传统意义上的状态机有些分别,(不是处理一个状态自动进入下一个状态)但是对于网络中接到一个数据包做相应的逻辑处理的程序已经够用了。

 

稍后,将实现能够自动切换状态的状态机。

其中,定义了一些数据类型,需要包含windows.h的头文件。

 

自动切换状态的状态机

 

状态机中还有一种情况时,有些状态依赖于其他的状态,或需要等待某一条件打到后才执行。

可以设计MESSAGE_CMD_HANDLER(Cmd1,Cmd2, HandleCmd1,TRUE)

或MESSAGE_CMD_HANDLER(Cmd1,Cmd2, HandleCmd1,FALSE)

来标识是否立即执行下一状态。

这个功能后续实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值