这个函数中一个很重要的参数:wIdentifier;
可以来追溯一下他的源头:
1 // 数据消息
2 void CQueueService::OnQueueServiceThread( const tagDataHead & DataHead, void * pBuffer, WORD wDataSize)
3 {
4 ASSERT(m_pIQueueServiceSink!=NULL);
5 try
6 {
7 m_pIQueueServiceSink->OnQueueServiceSink(DataHead.wIdentifier,pBuffer,DataHead.wDataSize,DataHead.dwInsertTime);
8 }
9 catch () {}
10 return;
11}
可以看见他是直接保存在最底层的那个DataStroage里边的,这个在上一章分析中可以看到。(个引擎利用CQueueServiceEvent Post数据的时候就携带了类型信息)
另外一个要注意的点是对socket事件的处理,我之前认为调度引擎组合了一个socket引擎是一个设计缺陷,应为这里的在处理socket read事件的时候如果异常了直接直接使用引擎来关闭socket而不是调用socket sink的指定接口。猜想也许是不希望客户端直接处理socket句柄吧,,,
还是用一句话描述下调度引擎:
调度引擎的工作可以这样描述消息汇总、派发。其他引擎通过CQueueServiceEvent将消息post到调度引擎上来(通过共享同一个CQueueService),然后由调度引擎集中派发出去,,, |