网狐棋牌(二) CQueueServiceEvent初步分析
相关UML:
代码分析:
首先CQueueServiceEvent这个名字很有诱惑,,,你感觉他是一个事件,其实不是。它实际的功能应该是一个带打包功能的事件队列,,,或者说是一个像指定的类似EventQueue的东东中投递事件。从接口上看,这个东东能投递TimerEvent DataBaseEvent SocketAcceptEvent SocketReadEvent SocketCloseEvent
应为它本身持有一个CQueueService指针,所以本身并不负责数据管理,只负责打包并添加到CQueueService实例中去。
先看定时器事件:
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版本错误也不会被漏掉,,,
关于事件的封装,在这里其实已经分层了,,,
这里是第一层:
2{
3 WORD wDataSize; //数据大小
4 WORD wIdentifier; //类型标识
5 DWORD dwInsertTime; //插入时间
6};
这一层实际上是由CDataStorage负责打包管理,在CQueueServiceEvent执行PostTimerEvent操作的时候会在内部调用CQueueService的add最终调用到CDataStrorage的Add来打包数据,这里的结构也是非常像网络数据包|- len -|- type -|- data -|。
在来看Post这一层做的数据打包:
2struct NTY_TimerEvent
3{
4 WORD wTimerID; //定时器 ID
5 WPARAM wBindParam; //绑定参数
6};
|- len -|- type -|- sub protocl -|。
其他事件的打包过程都是类似的:
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初步分析相关推荐
- 网狐棋牌 二次开发流程
从数据库中提取数据,修改存储过程 数据库和调度引擎之间进行数据交互: 调度引擎向数据库赋值,先将调度引擎的数据显示输出,判断无误后:再将数据库赋值过程中的数据显示输出,判断无误后,看数据库中的数据是否 ...
- 网狐棋牌游戏平台服务器架构设计分析
调用模型 模仿COM组件接口模式,利用面向对象思想多态性polymorphism,调用方保存着被调用方的基础接口指针(interface or sink钩子)(Pure Virtual Functio ...
- 网狐棋牌游戏平台服务器架构设计分析[转]
网狐棋牌游戏平台服务器架构设计分析[转] http://blog.csdn.net/weiwangchao_/article/details/7047044 基本设计概念和处理流程 调用模型 模仿CO ...
- 关于网狐棋牌6603源码的整理、编译和搭建
最近换工作,趁着有一段清闲时间,整理了一下网狐棋牌的源码,这份源码下载很久了,一直呆在硬盘.这次正好好好看看. 网狐的代码质量很高,流露出来的代码也比较完整,基本上都能编译通过.但是要真的搭建起来,还 ...
- 网狐棋牌(六) DataBaseEngine 和 网狐棋牌(七) CEventService
相关UML: 使用数据库引擎必须持有数据库引擎内部队列,实现数据库回调接口(用来处理数据库操作请求),然后结果投递到调度引擎队列. 理解网络狐棋牌,最重要是理解两个概念: 1,队列服务 2,接口的传递 ...
- 网狐棋牌经典版管理后台操作手册
网狐棋牌_经典版游戏 管理后台操作手册 管理平台概述: i. 使用说明: 本手册是提供给运营商阅读使用,帮助 ...
- 网狐棋牌(八) 异步引擎 和 网狐棋牌(九) 服务引擎概览
相关UML: 核心技术在于:在指定的线程中创建窗口,然后向窗口发送消息,在窗口消息处理中调用外部回调. ------------------------------------------------ ...
- 关于网狐棋牌的数据库
前不久放出了我自己整理的网狐棋牌的源码,下载的网友反应都不错,只是不少同学都找我要数据库,最近一直没时间,今天趁放假的时间把数据库放出来,分享给大家. 关于网狐棋牌6603源码的整理.编译和搭建 数据 ...
- 网狐棋牌框架内核通信设计原理剖析
关于网狐框架我使用和了解大致有5年多了,也深知里面的一些坑坑洼洼,其他人写的一些关于网狐框架分析的文章,大多都是贴上大量的代码,模块流程大致的解说,都是一些皮毛解说,并没有点出为什么这 ...
- 网狐棋牌客户端连接服务器修改方法6,网狐游戏服务器 客户端连接
网狐游戏服务器 客户端连接 内容精选 换一换 本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例.用户可以直接操作副本集主节点和备节点.主节点用于读写请求,您可以连接主节 ...
最新文章
- eBPF bcc实例分析
- java开发和测试开发,附小技巧
- python——面向对象篇之异常和反射
- android蓝牙串口 hc06,Android手机通过蓝牙模块HC-06连接Arduino串口输出
- CentOS8 安装图形界面后,怎么转换为命令行界面
- c++高斯投影正反算_为何买手机要选Type-C接口的?除充电快以外,还隐藏这4个妙用...
- 在html中写三角,css3怎么写三角形?
- pcl点云库python实现_如何有效地将ROS PointCloud2转换为pcl点云并在python中将其可视化...
- nodejs 错误问题解决
- LINUX获取当前用户及信息的命令
- (转)比特币王国的内战与分裂|《财经》特稿
- Porter Stemming
- chart metadata is missing these dependencies
- RichFaces第一例
- C# 图片与byte[]转换
- 暴跌27%!科通芯城遭沽空机构狙击 被指“横跨十年的世纪骗案”
- 电子邮件营销七大案例
- Windows游戏编程学习笔记
- 新开的水果店怎么做营销策划,水果店的营销策划
- 【华为手机】如何关闭/卸载下滑出现的智慧搜索
热门文章
- jmetery压力测试工具
- webflux系列--reactor源码(一)
- python 公司年会抽奖_用Python做个年会抽奖小程序吧
- 函数计算机按键没反应,关于waitKey()函数按键无反应情况
- 哈希表-map(对于python来说是字典)
- springboot加入com.fasterxml.jackson.core-jackson-databind依赖后报错Error creating bean with name ‘requestM
- 快递鸟电子面单打印功能基于java
- java并发编程学习5--forkJoin
- Android下的junit 单元测试
- Solr学习笔记——查询