zoukankan      html  css  js  c++  java
  • MOOONserver新消息处理接口

        MOOON-server提供了一个通用的TCP框架,并对包的解析抽象出了IPacketHandler接口,这个接口提供了无限制的宽容度,支持任何协议,但是增加了使用复杂。
        由于大多数协议,都会定义一个消息包大小字段,基于这个前提,MOOON-server引用了新的接口IMessageObserver,它能够解析任何包头是net::TCommonMessageHeader的消息,在一个包解析完整后(包括包头和包体都已经接收完成),通过回调on_message()将消息传递给使用者,这样就大大简化了MOOON-server的编程。

    下面是接口的定义:

    点击(此处)折叠或打开

    1. /***
    2.   * 消息观察者
    3.   * 收到一个完整的消息时调用
    4.   * 如果你的消息头和net::TCommonMessageHeader一致,
    5.   * 则建议使用IMessageObserver,而不是IPacketHandler,
    6.   * IMessageObserver相对于IPacketHandler是更高级别的接口
    7.   */
    8. class CALLBACK_INTERFACE IMessageObserver
    9. {
    10. public:
    11.     virtual ~IMessageObserver() {}

    12.     /***
    13.       * 收到一个完整消息时被回调
    14.       * @request_header 输入参数,收到的消息头
    15.       * @request_body 输入参数,收到的消息体
    16.      *  这里需要注意,框架不会释放request_body的内存,需要使用者去释放
    17.       *  释放方法为:delete []request_body;,否则将有内存泄漏
    18.       * @response_buffer 输出参数,发送给对端的响应,默认值为NULL
    19.       * 请注意*response_buffer必须是new char[]出来的,
    20.       * 并且将由框架delete []
    21.       * @response_size 输出参数,需要发送给对端的响应数据字节数,默认值为0
    22.       * @return 处理成功返回true,否则返回false
    23.       */
    24.     virtual bool on_message(const net::TCommonMessageHeader& request_header
    25.                           , const char* request_body
    26.                           , char** response_buffer
    27.                           , size_t* response_sizer) = 0;

    28.     /***
    29.       * 连接被关闭
    30.       */
    31.     virtual void on_connection_closed()
    32.     {
    33.     }

    34.     /***
    35.       * 连接超时
    36.       * @return 如果返回true,确认是连接超时,连接将被关闭
    37.       * ;否则表示并未超时,连接会继续使用,同时时间戳会被更新
    38.       */
    39.     virtual bool on_connection_timeout()
    40.     {
    41.         return true;
    42.     }

    43.     /***
    44.      * 包发送完后被回调
    45.      * @return util::handle_continue 表示不关闭连接继续使用,
    46.      * 返回其它值则会关闭连接
    47.      */
    48.     virtual util::handle_result_t on_response_completed()
    49.     {
    50.         //return util::handle_close; // 短连接时
    51.         return util::handle_continue; // 长连接时
    52.     }
    53. };


  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/aquester/p/9891771.html
Copyright © 2011-2022 走看看