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; // 長連接時
    }
};


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 多層分類 的頭像
    多層分類

    多層分類的部落格

    多層分類 發表在 痞客邦 留言(0) 人氣()