MOOON-server提供了一个通用的TCP框架,并对包的解析抽象出了IPacketHandler接口,这个接口提供了无限制的宽容度,支持任何协议,但是增加了使用复杂。
由于大多数协议,都会定义一个消息包大小字段,基于这个前提,MOOON-server引用了新的接口IMessageObserver,它能够解析任何包头是net::TCommonMessageHeader的消息,在一个包解析完整后(包括包头和包体都已经接收完成),通过回调on_message()将消息传递给使用者,这样就大大简化了MOOON-server的编程。
下面是接口的定义:
/*** * 消息观察者 * 收到一个完整的消息时调用 * 如果你的消息头和net::TCommonMessageHeader一致, * 则建议使用IMessageObserver,而不是IPacketHandler, * IMessageObserver相对于IPacketHandler是更高级别的接口 */ class CALLBACK_INTERFACE IMessageObserver { public: virtual ~IMessageObserver() {} /*** * 收到一个完整消息时被回调 * @request_header 输入参数,收到的消息头 * @request_body 输入参数,收到的消息体 * 这里需要注意,框架不会释放request_body的内存,需要使用者去释放 * 释放方法为:delete []request_body;,否则将有内存泄漏 * @response_buffer 输出参数,发送给对端的响应,默认值为NULL * 请注意*response_buffer必须是new char[]出来的, * 并且将由框架delete []它 * @response_size 输出参数,需要发送给对端的响应数据字节数,默认值为0 * @return 处理成功返回true,否则返回false */ virtual bool on_message(const net::TCommonMessageHeader& request_header , const char* request_body , char** response_buffer , size_t* response_sizer) = 0; /*** * 连接被关闭 */ virtual void on_connection_closed() { } /*** * 连接超时 * @return 如果返回true,确认是连接超时,连接将被关闭 * ;否则表示并未超时,连接会继续使用,同时时间戳会被更新 */ virtual bool on_connection_timeout() { return true; } /*** * 包发送完后被回调 * @return util::handle_continue 表示不关闭连接继续使用, * 返回其它值则会关闭连接 */ virtual util::handle_result_t on_response_completed() { //return util::handle_close; // 短连接时 return util::handle_continue; // 长连接时 } };
本文出自 “飞月” 博客,请务必保留此出处http://mooon.blog.51cto.com/1246491/941084
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索接口
, return
, 消息
, virtual
, 一个
新消息
mooonfish、mooon cafe、acgmooon、mooon、dealmooon,以便于您获取更多的相关知识。
时间: 2025-01-03 08:11:24