网狐棋牌代码分析(二) CQueueServiceEvent初步分析
(有什么问题欢迎指教,企鹅: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初步分析相关推荐
- 网狐棋牌代码分析(三) 调度引擎初步分析
(有什么问题欢迎指教,企鹅:2172243813 更多资讯尽在www.ttkmwl.com) //启动服务 virtual bool__cdecl StartService(); //停 ...
- 网狐棋牌游戏平台服务器架构设计分析
调用模型 模仿COM组件接口模式,利用面向对象思想多态性polymorphism,调用方保存着被调用方的基础接口指针(interface or sink钩子)(Pure Virtual Functio ...
- 网狐棋牌游戏平台服务器架构设计分析[转]
网狐棋牌游戏平台服务器架构设计分析[转] http://blog.csdn.net/weiwangchao_/article/details/7047044 基本设计概念和处理流程 调用模型 模仿CO ...
- 关于网狐棋牌6603源码的整理、编译和搭建
最近换工作,趁着有一段清闲时间,整理了一下网狐棋牌的源码,这份源码下载很久了,一直呆在硬盘.这次正好好好看看. 网狐的代码质量很高,流露出来的代码也比较完整,基本上都能编译通过.但是要真的搭建起来,还 ...
- 网狐棋牌经典版管理后台操作手册
网狐棋牌_经典版游戏 管理后台操作手册 管理平台概述: i. 使用说明: 本手册是提供给运营商阅读使用,帮助 ...
- 网狐棋牌(六) DataBaseEngine 和 网狐棋牌(七) CEventService
相关UML: 使用数据库引擎必须持有数据库引擎内部队列,实现数据库回调接口(用来处理数据库操作请求),然后结果投递到调度引擎队列. 理解网络狐棋牌,最重要是理解两个概念: 1,队列服务 2,接口的传递 ...
- 网狐棋牌(八) 异步引擎 和 网狐棋牌(九) 服务引擎概览
相关UML: 核心技术在于:在指定的线程中创建窗口,然后向窗口发送消息,在窗口消息处理中调用外部回调. ------------------------------------------------ ...
- 关于网狐棋牌的数据库
前不久放出了我自己整理的网狐棋牌的源码,下载的网友反应都不错,只是不少同学都找我要数据库,最近一直没时间,今天趁放假的时间把数据库放出来,分享给大家. 关于网狐棋牌6603源码的整理.编译和搭建 数据 ...
- 运营人常备的8个营销模型一、SWOT分析二、PEST分析三、3C
运营人常备的8个营销模型 一.SWOT分析 二.PEST分析 三.3C战略模型 四.STP理论 五.波特五力模型 六.波士顿矩阵 七.GE矩阵 八.商业模式画布 内容如下: 一.SWOT分析 1.st ...
最新文章
- (转)记忆杭州中的(非杭户籍人)
- mac svn 可视化界面_svn for mac 操作
- swift和python语法区别_Swift 基本语法
- 图像处理特征不变算子系列之KLT算子
- 语言for循环联程_Lua循环
- Python3的方法解析顺序(MRO)
- 用c语言复制字符串的元音字母,急求:编写程序,将一个字符串中的元音字母复制到另一个字符串,然后输出。...
- HDU 3397 Sequence operation(线段树)
- 解析ip分组_快来看看!!!你经常忽略的TCP/IP知识点~
- 2021年中国电子学习课程市场趋势报告、技术动态创新及2027年市场预测
- 苹果Safari中保存的密码如何导入Chrome浏览器?
- SQL Server学习之路(一):建立数据库、建立表
- 如何绘制逻辑图 — 8.逻辑的表达:数据逻辑
- AlphaControls 控件 锐浪报表 Grid++Report 打印浏览显示问题解决
- ArcBlock 赴美国华盛顿州议会作证支持区块链立法
- windows系统c++/VS2019编译gRPC
- 经典胶片图像效果lr预设
- 深扎实战技术 带你走进 MDCC 2016 移动开发者大会
- Day 4 R基础概念——向量、矩阵
- vmware启动报错Entering emergency mode