网狐棋牌代码分析(二) CQueueServiceEvent初步分析
来源:互联网 发布:switch php case 多个 编辑:程序博客网 时间:2024/06/06 12:51
(有什么问题欢迎指教,企鹅: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;