(有什么问题欢迎指教,企鹅:2172243813 更多资讯尽在www.ttkmwl.com)

代码分析:
首先CQueueServiceEvent这个名字很有诱惑,,,你感觉他是一个事件,其实不是。它实际的功能应该是一个带打包功能的事件队列,,,或者说是一个像指定的类似EventQueue的东东中投递事件。从接口上看,这个东东能投递TimerEvent DataBaseEvent  SocketAcceptEvent SocketReadEvent  SocketCloseEvent
应为它本身持有一个CQueueService指针,所以本身并不负责数据管理,只负责打包并添加到CQueueService实例中去。

先看定时器事件: 1   //定时器事件
2    boolPostTimerEvent(WORD wTimerID, WPARAM wBindParam)
3    {
4       //效验参数
5       ASSERT(m_pIQueueService!=NULL);
6       if (m_pIQueueService==NULL) return false;
7
8       //缓冲锁定
9       CThreadLockHandle BufferLockHandle(&m_BufferLock);
10
11       //投递消息
12       NTY_TimerEvent * pTimerEvent=(NTY_TimerEvent *)m_cbBuffer;
13       pTimerEvent->wTimerID=wTimerID;
14       pTimerEvent->wBindParam=wBindParam;
15       m_pIQueueService->AddToQueue(EVENT_TIMER,m_cbBuffer,sizeof(NTY_TimerEvent));
16
17       return true;
18    }
嗯哼,代码质量很高哈,,,
入口都有断言在debug阶段帮助暴露错误,断言之后还有if语句再次判断,这样即使release版本错误也不会被漏掉,,,
关于事件的封装,在这里其实已经分层了,,,

这里是第一层:
1struct tagDataHead
2 {
3   WORD                           wDataSize;                           //数据大小
4   WORD                           wIdentifier;                       //类型标识
5   DWORD                           dwInsertTime;                       //插入时间
6};
这一层实际上是由CDataStorage负责打包管理,在CQueueServiceEvent执行PostTimerEvent操作的时候会在内部调用CQueueService的add最终调用到CDataStrorage的Add来打包数据,这里的结构也是非常像网络数据包|-len -|- type -|- data -|。
在来看Post这一层做的数据打包:
1//定时器事件
2struct NTY_TimerEvent
3 {
4   WORD                           wTimerID;                           //定时器 ID
5   WPARAM                           wBindParam;                           //绑定参数
6};
|- len -|- type -|- sub protocl -|。

其他事件的打包过程都是类似的:

1//数据库请求事件
2struct NTY_DataBaseEvent
3 {
4   WORD                           wIndex;                               //对象索引
5   WORD                           wRoundID;                           //对象标识
6   WORD                           wRequestID;                           //请求标识
7};
8
9//网络应答事件
10struct NTY_SocketAcceptEvent
11 {
12   WORD                           wIndex;                               //连接索引
13   WORD                           wRoundID;                           //连接标识
14   DWORD                           dwClientIP;                           //连接地址
15};
16
17//网络读取事件
18struct NTY_SocketReadEvent
19 {
20   WORD                           wIndex;                               //连接索引
21   WORD                           wRoundID;                           //连接标识
22   WORD                           wDataSize;                           //数据大小
23   CMD_Command                       Command;                           //命令信息
24};
25
26//网络关闭事件
27struct NTY_SocketCloseEvent
28 {
29   WORD                           wIndex;                               //连接索引
30   WORD                           wRoundID;                           //连接标识
31   DWORD                           dwClientIP;                           //连接地址
32   DWORD                           dwConnectSecond;                   //连接时间
33};

还是一样,一句话总结CQueueServiceEvent:
线程安全的接受各种异步事件,并打包封装好以后插入到关联的制定IQueueService中.

网狐棋牌代码分析(二) CQueueServiceEvent初步分析相关推荐

  1. 网狐棋牌代码分析(三) 调度引擎初步分析

    (有什么问题欢迎指教,企鹅:2172243813 更多资讯尽在www.ttkmwl.com)    //启动服务 virtual bool__cdecl StartService();     //停 ...

  2. 网狐棋牌游戏平台服务器架构设计分析

    调用模型 模仿COM组件接口模式,利用面向对象思想多态性polymorphism,调用方保存着被调用方的基础接口指针(interface or sink钩子)(Pure Virtual Functio ...

  3. 网狐棋牌游戏平台服务器架构设计分析[转]

    网狐棋牌游戏平台服务器架构设计分析[转] http://blog.csdn.net/weiwangchao_/article/details/7047044 基本设计概念和处理流程 调用模型 模仿CO ...

  4. 关于网狐棋牌6603源码的整理、编译和搭建

    最近换工作,趁着有一段清闲时间,整理了一下网狐棋牌的源码,这份源码下载很久了,一直呆在硬盘.这次正好好好看看. 网狐的代码质量很高,流露出来的代码也比较完整,基本上都能编译通过.但是要真的搭建起来,还 ...

  5. 网狐棋牌经典版管理后台操作手册

    网狐棋牌_经典版游戏 管理后台操作手册                                   管理平台概述: i.             使用说明: 本手册是提供给运营商阅读使用,帮助 ...

  6. 网狐棋牌(六) DataBaseEngine 和 网狐棋牌(七) CEventService

    相关UML: 使用数据库引擎必须持有数据库引擎内部队列,实现数据库回调接口(用来处理数据库操作请求),然后结果投递到调度引擎队列. 理解网络狐棋牌,最重要是理解两个概念: 1,队列服务 2,接口的传递 ...

  7. 网狐棋牌(八) 异步引擎 和 网狐棋牌(九) 服务引擎概览

    相关UML: 核心技术在于:在指定的线程中创建窗口,然后向窗口发送消息,在窗口消息处理中调用外部回调. ------------------------------------------------ ...

  8. 关于网狐棋牌的数据库

    前不久放出了我自己整理的网狐棋牌的源码,下载的网友反应都不错,只是不少同学都找我要数据库,最近一直没时间,今天趁放假的时间把数据库放出来,分享给大家. 关于网狐棋牌6603源码的整理.编译和搭建 数据 ...

  9. 运营人常备的8个营销模型一、SWOT分析二、PEST分析三、3C

    运营人常备的8个营销模型 一.SWOT分析 二.PEST分析 三.3C战略模型 四.STP理论 五.波特五力模型 六.波士顿矩阵 七.GE矩阵 八.商业模式画布 内容如下: 一.SWOT分析 1.st ...

最新文章

  1. (转)记忆杭州中的(非杭户籍人)
  2. mac svn 可视化界面_svn for mac 操作
  3. swift和python语法区别_Swift 基本语法
  4. 图像处理特征不变算子系列之KLT算子
  5. 语言for循环联程_Lua循环
  6. Python3的方法解析顺序(MRO)
  7. 用c语言复制字符串的元音字母,急求:编写程序,将一个字符串中的元音字母复制到另一个字符串,然后输出。...
  8. HDU 3397 Sequence operation(线段树)
  9. 解析ip分组_快来看看!!!你经常忽略的TCP/IP知识点~
  10. 2021年中国电子学习课程市场趋势报告、技术动态创新及2027年市场预测
  11. 苹果Safari中保存的密码如何导入Chrome浏览器?
  12. SQL Server学习之路(一):建立数据库、建立表
  13. 如何绘制逻辑图 — 8.逻辑的表达:数据逻辑
  14. AlphaControls 控件 锐浪报表 Grid++Report 打印浏览显示问题解决
  15. ArcBlock 赴美国华盛顿州议会作证支持区块链立法
  16. windows系统c++/VS2019编译gRPC
  17. 经典胶片图像效果lr预设
  18. 深扎实战技术 带你走进 MDCC 2016 移动开发者大会
  19. Day 4 R基础概念——向量、矩阵
  20. vmware启动报错Entering emergency mode

热门文章

  1. unity Mirror使用心得二(服务器端的怪物创建,及其怪物AI的行为)
  2. java小系统 数据库 图书馆
  3. html 下拉列表框居中,下拉菜单如何居中并全屏宽显示
  4. 宾夕法尼亚大学机器人学学习笔记(3)
  5. idea中git打tag详解
  6. emlog发布文章自动变草稿修复方法
  7. 用lisp语言写一段cad提取坐标代码
  8. wiringPi库与bcm_2835区别
  9. 卷起来的大厂年终奖:网易年终奖888888,真爽啊
  10. linux如何写邮件到QQ邮箱