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://www.cnblogs.com/aquester/archive/2012/07/24/9891771.html

MOOON-server新消息处理接口相关推荐

  1. php查询ip归属地api接口_php调用新浪接口查询ip获取地理位置(ip归属地查询)

    php调用新浪接口查询ip获取地理位置(ip归属地查询) 发布于 2014-11-17 08:35:58 | 115 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...

  2. Surface Pro 4 和 Surface Book 使用名为 Surface UEFI(统一可扩展固件接口)的新固件接口...

    Surface Pro 4 和 Surface Book 使用名为 Surface UEFI(统一可扩展固件接口)的新固件接口. Surface UEFI 提供新功能,如启动更快速.安全性更高.可替换 ...

  3. ol3中妙用Arcgis Server Rest Export接口模拟WMS,并实现属性过滤

    概述 在本文,讲述如何妙用Arcgis Server的REST Export接口实现WMS服务的调用和图层的属性过滤. 参考 1.巧用Arcgis Server的REST接口实现OL2中WMS添加过滤 ...

  4. 淘宝店铺商品发布API(新)接口,店铺上传接口代码对接教程

    淘宝店铺商品发布API(新)接口,整理好一套淘宝店铺发布接口,店铺上传接口代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018) key String 是 ...

  5. Android P 为系统AudioManager添加新的接口方法

    整个需要添加的类均在frameworks\base\media\java\android\media 包下 1.AudioManager.java中添加两个方法,设置音频流设备的音量和得到相关音量 I ...

  6. 新商品发布接口,商品上下架接口,店铺上传接口,oAuth2.0商品发布新的接口对接方式

    一.开放平台新商品发布接口,商品上下架接口,淘宝店铺上传接口,新的接口对接方式文档如下: 第一步:打开开放平台链接:https://open.taobao.com/docV3.htm?spm=a219 ...

  7. tomcat源码阅读之Server和Service接口解析

    tomcat中的服务器组件接口是Server接口,服务接口是Service,Server接口表示Catalina的整个servlet引擎,囊括了所有的组件,提供了一种优雅的方式来启动/关闭Catali ...

  8. java8新特性_乐字节-Java8新特性-接口默认方法

    总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...

  9. Java8新特性-接口中的静态方法与默认方法

    今天上午在读<Effective Java>时,有这样一句话:"接口中"不能有静态方法,于是联想起面试时老是被问接口相关的东西,决定总结一下,谁知道这一总结,就发现了自 ...

最新文章

  1. maven编译时出现读取XXX时出错invalid LOC header (bad signature)
  2. java 虚拟机 初始化_Java虚拟机 类初始化 阶段
  3. conda环境里安装pydot
  4. windows 开启防火墙策略允许ftp端口通过
  5. Linq中的group by多表多字段,Sum求和
  6. python实验九答案_Python实验九
  7. jQuery设计动画
  8. 【C++ STL学习之五】容器set和multiset
  9. 华为全新折叠屏方案曝光:让人眼前一亮!
  10. 查一个字段中字符集超过30的列_Mysql 的字符集以及带来的一点存储影响
  11. 【语音处理】基于matlab GUI音频数据处理【含Matlab源码 1734期】
  12. 【基础篇】Navicat让MySQL数据库可视化
  13. 计算机如何使用键盘复制粘贴,电脑复制粘贴快捷键,手把手教你电脑怎么用键盘复制粘贴...
  14. Windows11中无法找到Office 2019 application的解决方案
  15. 1412202035-hpu-1003:C语言考试练习题_一元二次方程
  16. TDS210示波器的应用
  17. CSDN代码块背景色的调整
  18. 前端css让div浮动,Web前端篇:css浮动
  19. SIL9687读数据手册零碎笔记
  20. matlab里面幂指数怎么写,幂和指数 - MATLAB Simulink - MathWorks 中国

热门文章

  1. 吴恩达新书《Machine Learning Yearning》完整中文版 PDF 下载!
  2. 博士Nature发文:研究生阶段,4点经验助你学术“独立”!
  3. 南大周志华清华胡事民入围院士候选!计算机领域共计7人
  4. 机器人替代研究员,工作007,完成688次实验,登上Nature封面
  5. 20 位百万富翁希望自己 20 岁就明白的事
  6. 如何反驳「神经网络本质不过是初中生都会的复合函数」?
  7. 清华学霸震撼演讲:拼尽所有力气,只为给梦想一个机会!
  8. Django源码分析8:单元测试test命令浅析
  9. APP Store案例数据分析
  10. 数据结构之列表 timeit