相关UML:

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

先看定时器事件:

 1    //定时器事件
 2    bool PostTimerEvent(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中.

转自:http://www.cppblog.com/Error/articles/147948.html

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

  1. 网狐棋牌 二次开发流程

    从数据库中提取数据,修改存储过程 数据库和调度引擎之间进行数据交互: 调度引擎向数据库赋值,先将调度引擎的数据显示输出,判断无误后:再将数据库赋值过程中的数据显示输出,判断无误后,看数据库中的数据是否 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 网狐棋牌框架内核通信设计原理剖析

            关于网狐框架我使用和了解大致有5年多了,也深知里面的一些坑坑洼洼,其他人写的一些关于网狐框架分析的文章,大多都是贴上大量的代码,模块流程大致的解说,都是一些皮毛解说,并没有点出为什么这 ...

  10. 网狐棋牌客户端连接服务器修改方法6,网狐游戏服务器 客户端连接

    网狐游戏服务器 客户端连接 内容精选 换一换 本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例.用户可以直接操作副本集主节点和备节点.主节点用于读写请求,您可以连接主节 ...

最新文章

  1. eBPF bcc实例分析
  2. java开发和测试开发,附小技巧
  3. python——面向对象篇之异常和反射
  4. android蓝牙串口 hc06,Android手机通过蓝牙模块HC-06连接Arduino串口输出
  5. CentOS8 安装图形界面后,怎么转换为命令行界面
  6. c++高斯投影正反算_为何买手机要选Type-C接口的?除充电快以外,还隐藏这4个妙用...
  7. 在html中写三角,css3怎么写三角形?
  8. pcl点云库python实现_如何有效地将ROS PointCloud2转换为pcl点云并在python中将其可视化...
  9. nodejs 错误问题解决
  10. LINUX获取当前用户及信息的命令
  11. (转)比特币王国的内战与分裂|《财经》特稿
  12. Porter Stemming
  13. chart metadata is missing these dependencies
  14. RichFaces第一例
  15. C# 图片与byte[]转换
  16. 暴跌27%!科通芯城遭沽空机构狙击 被指“横跨十年的世纪骗案”
  17. 电子邮件营销七大案例
  18. Windows游戏编程学习笔记
  19. 新开的水果店怎么做营销策划,水果店的营销策划
  20. 【华为手机】如何关闭/卸载下滑出现的智慧搜索

热门文章

  1. jmetery压力测试工具
  2. webflux系列--reactor源码(一)
  3. python 公司年会抽奖_用Python做个年会抽奖小程序吧
  4. 函数计算机按键没反应,关于waitKey()函数按键无反应情况
  5. 哈希表-map(对于python来说是字典)
  6. springboot加入com.fasterxml.jackson.core-jackson-databind依赖后报错Error creating bean with name ‘requestM
  7. 快递鸟电子面单打印功能基于java
  8. java并发编程学习5--forkJoin
  9. Android下的junit 单元测试
  10. Solr学习笔记——查询