close
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; // 長連接時
}
};
全站熱搜
留言列表