逐步实现TCP服务端Step03-8:封装MessageBody类

MessageBody是消息体类,通过继承Codec类,获得Encode/Decode能力。现实中会存在各种各样的消息(体),MessageBody显然是它们的一般形式。

MessageBody具备了编解码能力,但具体编解什么内容,需要在具体的消息体里完成。这样的话,具体的消息体中应该有两个方法用于启动编解码操作,比如StartEncode、StartDecode 。

前面说过,若要使用Codec中的方法,首先要做的是调用PrepareEncode / PrepareDecode方法,把缓冲区准备好。按这个思路,我们使用StartEncode、StartDecode的方式可能是这样(以RequestAccountInfo消息体为例说明): 我们不希望在StartEncode、StartDecode方法中执行除编解码之外的其他动作,应该将Prepare工作提前,Finish工作拖后。定义一个Encode方法,调用StartEncode,同理再定义一个Decode方法:
也就是说,一个具体消息体类应该具备至少这四个方法:Encode、Decode、StartEncode、StartDecode 。其中,Encode和Decode应是供外部调用的。既然是具体类中都有的方法,那么应该一般化到MessageBody类中。只要考虑Encode和Decode即可,另外两个是它们的实现部分。

由此得出MessageBody类的基本形式(斜体表示抽象方法,下划线表示静态方法):
其中,在new运算符函数内,可以声明一个static unsigned char数组,以此数组作为构造MessageBody对象的空间。

详细代码:

<==  index  ==>