最新游戏服务器设计,教你从头写游戏服务器框架

class Protocol {

public:

virtual ~Protocol() {

}

/**

* @brief 把请求消息编码成二进制数据

* 编码,把msg编码到buf里面,返回写入了多长的数据,如果超过了 len,则返回-1表示错误。

* 如果返回 0 ,表示不需要编码,框架会直接从 msg 的缓冲区读取数据发送。

* @param buf 目标数据缓冲区

* @param offset 目标偏移量

* @param len 目标数据长度

* @param msg 输入消息对象

* @return 编码完成所用的字节数,如果 < 0 表示出错

*/

virtual int Encode(char* buf, int offset, int len, const Request& msg) = 0;

/**

* 编码,把msg编码到buf里面,返回写入了多长的数据,如果超过了 len,则返回-1表示错误。

* 如果返回 0 ,表示不需要编码,框架会直接从 msg 的缓冲区读取数据发送。

* @param buf 目标数据缓冲区

* @param offset 目标偏移量

* @param len 目标数据长度

* @param msg 输入消息对象

* @return 编码完成所用的字节数,如果 < 0 表示出错

*/

virtual int Encode(char* buf, int offset, int len, const Response& msg) = 0;

/**

* 编码,把msg编码到buf里面,返回写入了多长的数据,如果超过了 len,则返回-1表示错误。

* 如果返回 0 ,表示不需要编码,框架会直接从 msg 的缓冲区读取数据发送。

* @param buf 目标数据缓冲区

* @param offset 目标偏移量

* @param len 目标数据长度

* @param msg 输入消息对象

* @return 编码完成所用的字节数,如果 < 0 表示出错

*/

virtual int Encode(char* buf, int offset, int len, const Notice& msg) = 0;

/**

* 开始编码,会返回即将解码出来的消息类型,以便使用者构造合适的对象。

* 实际操作是在进行“分包”操作。

* @param buf 输入缓冲区

* @param offset 输入偏移量

* @param len 缓冲区长度

* @param msg_type 输出参数,表示下一个消息的类型,只在返回值 > 0 的情况下有效,否则都是 TypeError

* @return 如果返回0表示分包未完成,需要继续分包。如果返回-1表示协议包头解析出错。其他返回值表示这个消息包占用的长度。

*/

virtual int DecodeBegin(const char* buf, int offset, int len,

MessageType* msg_type) = 0;

/**

* 解码,把之前DecodeBegin()的buf数据解码成具体消息对象。

* @param request 输出参数,解码对象会写入此指针

* @return 返回0表示成功,-1表示失败。

*/

virtual int Decode(Request* request) = 0;

/**

* 解码,把之前DecodeBegin()的buf数据解码成具体消息对象。

* @param request 输出参数,解码对象会写入此指针

* @return 返回0表示成功,-1表示失败。

*/

virtual int Decode(Response* response) = 0;

/**

* 解码,把之前DecodeBegin()的buf数据解码成具体消息对象。

* @param request 输出参数,解码对象会写入此指针

* @return 返回0表示成功,-1表示失败。

*/

virtual int Decode(Notice* notice) = 0;protected:

Protocol() {

}

};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值