服務(wù)器核心概要設(shè)計(jì)_第1頁(yè)
服務(wù)器核心概要設(shè)計(jì)_第2頁(yè)
服務(wù)器核心概要設(shè)計(jì)_第3頁(yè)
服務(wù)器核心概要設(shè)計(jì)_第4頁(yè)
服務(wù)器核心概要設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、服務(wù)器核心模塊概要設(shè)計(jì)1引言11.1編寫(xiě)目的11.2背景12總體設(shè)計(jì)22.1需求規(guī)定22.2運(yùn)行環(huán)境22.3開(kāi)發(fā)環(huán)境22.4基本設(shè)計(jì)概念和處理流程2調(diào)用模型2基于事件驅(qū)動(dòng)的數(shù)據(jù)處理模型2事件數(shù)據(jù)設(shè)計(jì)3框架體系設(shè)計(jì)32.5功能模塊劃分33模塊詳細(xì)設(shè)計(jì)43.1數(shù)據(jù)隊(duì)列服務(wù)QueueService模塊設(shè)計(jì)4基本設(shè)計(jì)概念4類(lèi)與接口設(shè)計(jì)4運(yùn)行流程83.2網(wǎng)絡(luò)引擎TCPSocketEngine模塊設(shè)計(jì)8網(wǎng)絡(luò)重疊完成端口IOCP簡(jiǎn)介8基本設(shè)計(jì)概念9網(wǎng)絡(luò)數(shù)據(jù)命令包結(jié)構(gòu)設(shè)計(jì)10網(wǎng)絡(luò)數(shù)據(jù)加密設(shè)計(jì)10類(lèi)與接口設(shè)計(jì)113.3數(shù)據(jù)庫(kù)引擎DataBaseEngine模塊設(shè)計(jì)11基本設(shè)計(jì)概念11類(lèi)與接口設(shè)計(jì)11運(yùn)行流程22

2、3.4定時(shí)器引擎TimerEngine模塊設(shè)計(jì)23基本設(shè)計(jì)概念23類(lèi)與接口設(shè)計(jì)23運(yùn)行流程263.5調(diào)度引擎AttemperEngine模塊設(shè)計(jì)26基本設(shè)計(jì)概念26類(lèi)與接口設(shè)計(jì)26運(yùn)行流程303.6異步引擎AsynchronismEngine模塊設(shè)計(jì)31基本設(shè)計(jì)概念31類(lèi)與接口設(shè)計(jì)31運(yùn)行流程343.7服務(wù)引擎ServiceEngine模塊設(shè)計(jì)35基本設(shè)計(jì)概念35類(lèi)與接口設(shè)計(jì)35運(yùn)行流程401 引言1.1 編寫(xiě)目的方便二次開(kāi)發(fā)人員理解服務(wù)器核心技術(shù)1.2 背景3.3.1 為一般游戲服務(wù)器設(shè)計(jì)的核心模塊3.3.2 本項(xiàng)目的任務(wù)開(kāi)發(fā)者:Godzilar系統(tǒng)使用用戶(hù): 游戲服務(wù)器二次開(kāi)發(fā)人員2 總體

3、設(shè)計(jì)2.1 需求規(guī)定3.3.1 系統(tǒng)功能提供網(wǎng)絡(luò)服務(wù)接口,數(shù)據(jù)庫(kù)訪問(wèn)接口,定時(shí)器接口,并提供調(diào)度鉤子接口,讓二次開(kāi)發(fā)人員調(diào)用,更多精力處理游戲邏輯3.3.2 系統(tǒng)性能網(wǎng)絡(luò)負(fù)載支持2000同時(shí)在線連接以上數(shù)據(jù)庫(kù)訪問(wèn)支持100并發(fā)訪問(wèn)定時(shí)器時(shí)間精度達(dá)25ms之內(nèi)2.2 運(yùn)行環(huán)境硬件平臺(tái):x86體系結(jié)構(gòu)軟件平臺(tái):Window2003操作系統(tǒng)2.3 開(kāi)發(fā)環(huán)境開(kāi)發(fā)工具:Visual C+ 2003開(kāi)發(fā)語(yǔ)言:C+2.4 基本設(shè)計(jì)概念和處理流程2.4.1 調(diào)用模型利用面向?qū)ο笏枷攵鄳B(tài)性,調(diào)用方保存著被調(diào)用方的基礎(chǔ)接口指針(一般稱(chēng)呼為 鉤子),調(diào)用方直接調(diào)用接口指針里面方法,方法具體實(shí)現(xiàn)邏輯由該接口的派生類(lèi)實(shí)

4、現(xiàn).示意圖:被調(diào)用方 B調(diào)用方 A接口指針虛類(lèi)接口派生類(lèi)2.4.2 基于事件驅(qū)動(dòng)的數(shù)據(jù)處理模型為系統(tǒng)功能設(shè)計(jì),需要處理網(wǎng)絡(luò)事件數(shù)據(jù)SocketEvent,數(shù)據(jù)庫(kù)事件數(shù)據(jù)DatabaseEvent,定時(shí)器事件數(shù)據(jù)TimerEvent等,為此建立數(shù)據(jù)隊(duì)列服務(wù)QueueService,為每一隊(duì)列建立多個(gè)子線程QueueServiceThread處理。數(shù)據(jù)隊(duì)列服務(wù)提供添加事件數(shù)據(jù)方法AddToQueue,設(shè)置數(shù)據(jù)隊(duì)列服務(wù)鉤子SetQueueServiceSink,讓數(shù)據(jù)隊(duì)列服務(wù)鉤子QueueServiceSink做具體邏輯事件數(shù)據(jù)處理。示意圖:內(nèi)部線程Thread處理執(zhí)行數(shù)據(jù)隊(duì)列服務(wù)QueueServ

5、ice事件數(shù)據(jù)輸入執(zhí)行數(shù)據(jù)隊(duì)列服務(wù)鉤子QueueServiceSink方法再者,根據(jù)網(wǎng)絡(luò),數(shù)據(jù)庫(kù)等特定功能,構(gòu)建網(wǎng)絡(luò),數(shù)據(jù)庫(kù)等管理服務(wù),實(shí)現(xiàn)數(shù)據(jù)隊(duì)列服務(wù)鉤子QueueServiceSink方法,調(diào)度事件數(shù)據(jù)執(zhí)行外部處理接口,外部處理接口具體由二次開(kāi)發(fā)用戶(hù)實(shí)現(xiàn)。示意圖:外部處理接口管理服務(wù)實(shí)現(xiàn)數(shù)據(jù)隊(duì)列服務(wù)鉤子QueueServiceSink方法2.4.3 事件數(shù)據(jù)設(shè)計(jì)名稱(chēng)描述類(lèi)型定時(shí)器事件TimerEvent根據(jù)時(shí)間間隔,定期產(chǎn)生自發(fā),被動(dòng)數(shù)據(jù)庫(kù)事件DatabaseEvent請(qǐng)求訪問(wèn)數(shù)據(jù)庫(kù)用戶(hù)自定義,主動(dòng)網(wǎng)絡(luò)應(yīng)答事件SocketAcceptEvent客戶(hù)端連接網(wǎng)絡(luò)服務(wù),成功連接自發(fā),被動(dòng)網(wǎng)絡(luò)讀取

6、事件SocketReadEvent客戶(hù)端發(fā)送數(shù)據(jù),網(wǎng)絡(luò)服務(wù)成功讀取自發(fā),被動(dòng)網(wǎng)絡(luò)關(guān)閉事件SocketControlEvent客戶(hù)端失去連接自發(fā),被動(dòng)控制事件ControlEvent用戶(hù)自定義控制服務(wù)用戶(hù)自定義,主動(dòng)2.4.4 框架體系設(shè)計(jì)外部 實(shí)現(xiàn)內(nèi)部 服務(wù)引擎ServiceEngine調(diào)度引擎AttemperEngine網(wǎng)絡(luò)引擎TCPSocketEngine數(shù)據(jù)庫(kù)引擎DataBaseEngine定時(shí)器引擎TimerEngine 調(diào)度引擎鉤子AttemperEngineSink 數(shù)據(jù)庫(kù)引擎鉤子DataBaseSink異步引擎TimerEngine 異步引擎鉤子DataBaseSink2.5 功

7、能模塊劃分名稱(chēng)描述開(kāi)發(fā)優(yōu)先數(shù)據(jù)隊(duì)列服務(wù)QueueService外部接受輸入事件數(shù)據(jù),內(nèi)部實(shí)現(xiàn)事件數(shù)據(jù)鏈表保存與管理, 處理子線程從鏈表獲取事件數(shù)據(jù)調(diào)用數(shù)據(jù)隊(duì)列鉤子方法處理事件數(shù)據(jù)1網(wǎng)絡(luò)引擎TCPSocketEngine實(shí)現(xiàn)數(shù)據(jù)隊(duì)列服務(wù)鉤子方法,管理網(wǎng)絡(luò)事件數(shù)據(jù),內(nèi)部啟動(dòng)網(wǎng)絡(luò)服務(wù)器監(jiān)聽(tīng)服務(wù),接收與發(fā)送網(wǎng)絡(luò)數(shù)據(jù),并調(diào)用網(wǎng)絡(luò)處理鉤子進(jìn)行邏輯處理2數(shù)據(jù)庫(kù)引擎DataBaseEngine實(shí)現(xiàn)數(shù)據(jù)隊(duì)列服務(wù)鉤子方法,管理數(shù)據(jù)庫(kù)事件數(shù)據(jù),并調(diào)用數(shù)據(jù)庫(kù)處理鉤子進(jìn)行邏輯處理,還提供數(shù)據(jù)庫(kù)訪問(wèn)的幫助類(lèi)2定時(shí)器引擎TimerEngine實(shí)現(xiàn)設(shè)置定時(shí),刪除定時(shí)請(qǐng)求,發(fā)生定時(shí)事件2調(diào)度引擎AttemperEngine接收

8、,調(diào)度與管理網(wǎng)絡(luò)事件數(shù)據(jù),數(shù)據(jù)庫(kù)事件數(shù)據(jù),定時(shí)器事件數(shù)據(jù),自定義調(diào)度事件數(shù)據(jù)2異步引擎AsynchronismEngine設(shè)置多個(gè)數(shù)據(jù)處理鉤子,異步接收請(qǐng)求并處理2服務(wù)引擎ServiceEngine管理網(wǎng)絡(luò)引擎,數(shù)據(jù)庫(kù)引擎,定時(shí)器引擎,調(diào)度引擎,異步引擎33 模塊詳細(xì)設(shè)計(jì)3.1 數(shù)據(jù)隊(duì)列服務(wù)QueueService模塊設(shè)計(jì)3.1.1 基本設(shè)計(jì)概念建立一個(gè)內(nèi)存鏈表,保存事件數(shù)據(jù),對(duì)外部提供方法往鏈表添加事件數(shù)據(jù)并通知線程,同時(shí)啟動(dòng)多個(gè)處理線程,從數(shù)據(jù)鏈表里獲取事件數(shù)據(jù),執(zhí)行外部鉤子方法進(jìn)行處理.線程事件通知采用完成端口技術(shù).3.1.2 類(lèi)與接口設(shè)計(jì)l 接口設(shè)計(jì)IQueueServiceEngin

9、e隊(duì)列引擎接口模塊QueueService繼承IQueueServiceEngine IUnknownEx實(shí)現(xiàn)數(shù)據(jù)成員名稱(chēng)說(shuō)明方法virtual bool _cdecl StartService(BYTE cbThreadCount)說(shuō)明開(kāi)始服務(wù)參數(shù)BYTE cbThreadCount 處理事件數(shù)據(jù)的線程數(shù)量返回類(lèi)型為Bool,啟動(dòng)成功返回true,否則false舉例virtual bool _cdecl StopService()說(shuō)明停止服務(wù)參數(shù)返回類(lèi)型為Bool,啟動(dòng)成功返回true,否則false舉例virtual bool _cdecl SetQueueServiceSink(IUnk

10、nownEx * pIUnknownEx)說(shuō)明設(shè)置接口外部事件處理鉤子參數(shù)IUnknownEx * pIUnknownEx 外部事件數(shù)據(jù)處理鉤子返回類(lèi)型為Bool,設(shè)置成功返回true,否則false舉例virtual bool _cdecl GetBurthenInfo(tagBurthenInfo & BurthenInfo)說(shuō)明獲取數(shù)據(jù)隊(duì)列負(fù)荷信息參數(shù)tagBurthenInfo & BurthenInfo 負(fù)荷信息結(jié)構(gòu)體返回類(lèi)型為Bool,設(shè)置成功返回true,否則false舉例IQueueServiceSink隊(duì)列服務(wù)鉤子,由外部繼層實(shí)現(xiàn)模塊QueueService繼

11、承IQueueServiceSink IUnknownEx實(shí)現(xiàn)數(shù)據(jù)成員名稱(chēng)說(shuō)明方法virtual void _cdecl OnQueueServiceSink(BYTE cbThreadIndex,WORD wIdentifier, void * pBuffer, WORD wDataSize, DWORD dwInsertTime)說(shuō)明通知回調(diào)函數(shù)參數(shù)BYTE cbThreadIndex 處理事件數(shù)據(jù)的線程索引WORD wIdentifier 事件數(shù)據(jù)標(biāo)記void * pBuffer 數(shù)據(jù)指針WORD wDataSize 數(shù)據(jù)大小DWORD dwInsertTime 插入時(shí)間值返回舉例l 類(lèi)

12、設(shè)計(jì)CQueueServiceThread隊(duì)列處理線程類(lèi)模塊QueueService繼承CQueueServiceThread CServiceThread實(shí)現(xiàn)數(shù)據(jù)成員名稱(chēng)說(shuō)明HANDLEm_hCompletionPort完成端口句柄BYTE m_cbThreadIndex線程索引BYTE m_cbBufferMAX_QUEUE_PACKET事件接收緩沖方法bool InitThread(HANDLE hCompletionPort,BYTE cbThreadIndex)說(shuō)明配置參數(shù)HANDLE hCompletionPort 完成端口句柄BYTE cbThreadIndex 線程索引返回類(lèi)型

13、為Bool,設(shè)置成功返回true,否則false舉例bool UnInitThread()說(shuō)明取消配置參數(shù)返回類(lèi)型為Bool,設(shè)置成功返回true,否則false舉例virtual bool RepetitionRun()說(shuō)明線程運(yùn)行函數(shù)參數(shù)返回類(lèi)型為Bool舉例CQueueService隊(duì)列服務(wù)類(lèi)模塊QueueService繼承CQueueService IQueueServiceEngine, IQueueService實(shí)現(xiàn)IQueueServiceEngine, IQueueService數(shù)據(jù)成員名稱(chēng)說(shuō)明boolm_bService服務(wù)標(biāo)志IQueueServiceSink * m_pI

14、QueueServiceSink回調(diào)鉤子接口CThreadLockm_ThreadLock線程鎖CDataStoragem_DataStorage數(shù)據(jù)存儲(chǔ)CQueueServiceThread*m_QueueServiceThread隊(duì)列線程HANDLE*m_hCompletionPort 完成端口指針BYTEm_cbThreadCount 線程處理數(shù)目方法virtual bool _cdecl AddToQueue(WORD wIdentifier, void * const pBuffer, WORD wDataSize)說(shuō)明添加事件數(shù)據(jù)參數(shù)WORD wIdentifier 事件數(shù)據(jù)標(biāo)記v

15、oid * const pBuffer 事件數(shù)據(jù)指針WORD wDataSize 事件數(shù)據(jù)大小返回類(lèi)型為Bool,添加成功返回true,否則false舉例virtual bool _cdecl StartService(BYTE cbThreadCount)說(shuō)明開(kāi)始服務(wù)參數(shù)BYTE cbThreadCount 線程數(shù)量返回類(lèi)型為Bool,開(kāi)始成功返回true,否則false舉例virtual bool _cdecl StopService()說(shuō)明停止服務(wù)參數(shù)返回類(lèi)型為Bool, 停止成功返回true,否則false舉例virtual bool _cdecl SetQueueServiceSin

16、k(IUnknownEx * pIUnknownEx)說(shuō)明設(shè)置接口外部事件處理鉤子參數(shù)IUnknownEx * pIUnknownEx 外部事件數(shù)據(jù)處理鉤子返回類(lèi)型為Bool,設(shè)置成功返回true,否則false舉例virtual bool _cdecl GetBurthenInfo(tagBurthenInfo & BurthenInfo)說(shuō)明獲取數(shù)據(jù)隊(duì)列負(fù)荷信息參數(shù)tagBurthenInfo & BurthenInfo 負(fù)荷信息結(jié)構(gòu)體返回類(lèi)型為Bool,設(shè)置成功返回true,否則false舉例bool GetData(tagDataHead & DataHead,

17、 void * pBuffer, WORD wBufferSize)說(shuō)明獲取事件數(shù)據(jù)參數(shù)tagDataHead & DataHead 事件數(shù)據(jù)頭void * pBuffer 數(shù)據(jù)指針WORD wBufferSize 數(shù)據(jù)大小返回類(lèi)型為Bool,獲取成功返回true,否則false舉例void OnQueueServiceThread(BYTE cbThreadIndex, const tagDataHead & DataHead, void * pBuffer, WORD wDataSize)說(shuō)明事件消息,主要由隊(duì)列線程調(diào)用參數(shù)BYTE cbThreadIndex 線程索引ta

18、gDataHead & DataHead 事件數(shù)據(jù)頭void * pBuffer 數(shù)據(jù)指針WORD wBufferSize 數(shù)據(jù)大小返回舉例l 類(lèi)繼承圖隊(duì)列類(lèi)引擎接口IQueueServiceEngine數(shù)據(jù)隊(duì)列接口IQueueService數(shù)據(jù)隊(duì)列類(lèi)CQueueService線程對(duì)象類(lèi)CServiceThread隊(duì)列線程類(lèi)CQueueServiceThread3.3.1 運(yùn)行流程開(kāi)始服務(wù)StartService停止服務(wù)StopService加入數(shù)據(jù)AddToQueue設(shè)置鉤子接口SetQueueServiceSink保存數(shù)據(jù) AddData隨機(jī)通知線程處理PostQueuedComp

19、letionStatus處理線程CQueueServiceThread運(yùn)行 RepetitionRun等待完成端口事件GetQueuedCompletionStatus獲取數(shù)據(jù)GetData調(diào)用外部鉤子方法處理OnQueueServiceSink3.2 網(wǎng)絡(luò)引擎TCPSocketEngine模塊設(shè)計(jì)3.2.1 網(wǎng)絡(luò)重疊完成端口IOCP簡(jiǎn)介完成端口:是一個(gè)FIFO隊(duì)列,操作系統(tǒng)的IO子系統(tǒng)在IO操作完成后,會(huì)把相應(yīng)的IO packet放入該隊(duì)列。-等待者線程隊(duì)列:通過(guò)調(diào)用GetQueuedCompletionStatus API,在完成端口上等待取下一個(gè)IO packet。執(zhí)行者線程組:已經(jīng)從完

20、成端口上獲得IO packet,在占用CPU進(jìn)行處理。除了以上三種類(lèi)型的參與者。我們還應(yīng)該注意兩個(gè)關(guān)聯(lián)關(guān)系,即:IO Handle與完成端口相關(guān)聯(lián):任何期望使用IOCP的方式來(lái)處理IO請(qǐng)求的,必須將相應(yīng)的IO Handle與該完成端口相關(guān)聯(lián)。需要指出的時(shí),這里的IO Handle,可以是File的Handle,或者是Socket的Handle。-線程與完成端口相關(guān)聯(lián):任何調(diào)用GetQueuedCompletionStatus API的線程,都將與該完成端口相關(guān)聯(lián)。在任何給定的時(shí)候,該線程只能與一個(gè)完成端口相關(guān)聯(lián),與最后一次調(diào)用的GetQueuedCompletionStatus為準(zhǔn).對(duì)于網(wǎng)絡(luò)重

21、疊完成端口體系示意圖如下:操作系統(tǒng)線程用戶(hù)工作線程Accept網(wǎng)絡(luò)監(jiān)聽(tīng)接收綁定socket句柄CreateIoCompletionPort(socket句柄,)完成端口m_hCompletionPortWSARecv 請(qǐng)求讀取數(shù)據(jù)WSASend 請(qǐng)求發(fā)送數(shù)據(jù)操作系統(tǒng)的IO子系統(tǒng)處理請(qǐng)求GetQueuedCompletionStatus 判斷完成端口狀態(tài)操作線程WSARecv, WSASend請(qǐng)求處理完畢執(zhí)行邏輯處理,例如再次WSARecv請(qǐng)求等網(wǎng)絡(luò)重疊完成端口使用示意圖如下:創(chuàng)建完成端口m_hCompletionPort=CreateIoCompletionPort(INVALID_HANDL

22、E_VALUE,NULL,NULL,SystemInfo.dwNumberOfProcessors);綁定socket句柄CreateIoCompletionPort(HANDLE)hConnectSocket,m_hCompletionPort,(ULONG_PTR)pServerSocketItem,0);關(guān)閉完成端口CloseHandle(m_hCompletionPort);3.2.2 基本設(shè)計(jì)概念建立數(shù)據(jù)隊(duì)列服務(wù)QueueService,對(duì)外部輸入的對(duì)socket的發(fā)送,關(guān)閉請(qǐng)求等處理。同時(shí)建立工作線程SocketAcceptThread做應(yīng)答Socket,建立讀寫(xiě)工作線程Serve

23、rSocketRSThread判斷完成端口狀態(tài),等待系統(tǒng)線程處理讀寫(xiě)操作完成,如果完成讀操作,發(fā)送調(diào)度事件到調(diào)度引擎處理,并繼續(xù)投遞讀操作,如果完成發(fā)送操作,判斷還有發(fā)送請(qǐng)求就繼續(xù)投遞發(fā)送請(qǐng)求。最后建立檢測(cè)工作線程,發(fā)送心跳包,檢測(cè)斷線socket連接。l 數(shù)據(jù)設(shè)計(jì)與管理先設(shè)計(jì)客戶(hù)端連接項(xiàng)ServerSocketItem,實(shí)現(xiàn)對(duì)客戶(hù)端連接Socket的發(fā)送,接收數(shù)據(jù),加密/解密網(wǎng)絡(luò)包,關(guān)閉等操作再設(shè)計(jì)網(wǎng)絡(luò)引擎TCPSocketEngine,對(duì)客戶(hù)端連接項(xiàng)的管理,同時(shí)接收外部的輸入操作請(qǐng)求,還有對(duì)應(yīng)答線程,讀寫(xiě)線程,檢測(cè)線程管理設(shè)計(jì)應(yīng)答線程,讀寫(xiě)線程,檢測(cè)線程的功能進(jìn)行封裝,還有重疊數(shù)據(jù)的幫助封

24、裝。l 工作線程運(yùn)行設(shè)計(jì)讀寫(xiě)線程ServerSocketRSThread判斷完成端口狀態(tài),內(nèi)部線程Thread處理執(zhí)行數(shù)據(jù)隊(duì)列服務(wù)QueueService外部發(fā)送請(qǐng)求SendData關(guān)閉請(qǐng)求CloseSocket等執(zhí)行數(shù)據(jù)隊(duì)列服務(wù)鉤子QueueServiceSink方法該鉤子IQueueServiceSink由網(wǎng)絡(luò)引擎管理類(lèi)TCPSocketEngine繼承實(shí)現(xiàn)QUEUE_SEND_REQUEST 發(fā)送請(qǐng)求QUEUE_SAFE_CLOSE關(guān)閉請(qǐng)求QUEUE_ALLOW_BATCH容許群發(fā)QUEUE_DETECT_SOCKET 檢測(cè)連接檢測(cè)線程SocketDetectThread客戶(hù)端連接項(xiàng)CS

25、erverSocketItem處理請(qǐng)求應(yīng)答線程SocketAcceptThread應(yīng)答,生成客戶(hù)端連接項(xiàng)3.2.3 網(wǎng)絡(luò)數(shù)據(jù)命令包結(jié)構(gòu)設(shè)計(jì)網(wǎng)絡(luò)數(shù)據(jù)包分兩個(gè)區(qū)域:包頭,用戶(hù)數(shù)據(jù)包頭:每個(gè)網(wǎng)絡(luò)包都帶的數(shù)據(jù)區(qū)域,裝載數(shù)據(jù)包結(jié)構(gòu)信息與數(shù)據(jù)包命令信息用戶(hù)數(shù)據(jù):根據(jù)命令信息不一樣,用戶(hù)自定義的負(fù)載數(shù)據(jù)具體結(jié)構(gòu)如下:網(wǎng)絡(luò)命令包CMD_Head 數(shù)據(jù)包傳遞包頭CMD_Info 數(shù)據(jù)包結(jié)構(gòu)信息具體字段:WORDwDataSize;/數(shù)據(jù)大小BYTEcbCheckCode;/效驗(yàn)字段BYTEcbMessageVer;/版本標(biāo)識(shí)CMD_Command 數(shù)據(jù)包命令信息具體字段:WORDwMainCmdID;/ 主命令

26、碼WORDwSubCmdID;/ 子命令碼CMD_Data 用戶(hù)命令數(shù)據(jù)3.2.4 網(wǎng)絡(luò)數(shù)據(jù)加密設(shè)計(jì)數(shù)據(jù)加密部分為CMD_Command 數(shù)據(jù)包命令信息 與 CMD_Data 用戶(hù)命令數(shù)據(jù), CMD_Info 數(shù)據(jù)包結(jié)構(gòu)信息不加密.加密算法為根據(jù)字節(jié)影射表,將字節(jié)替換。例如數(shù)據(jù)包第6個(gè)字節(jié)是0x90,通過(guò)字節(jié)影射表查找,對(duì)應(yīng)的是0x1d,則該字節(jié)替換為0x1d發(fā)送.3.2.5 類(lèi)與接口設(shè)計(jì)l 接口設(shè)計(jì)請(qǐng)查閱 SocketEngine.h 頭文件l 類(lèi)設(shè)計(jì)請(qǐng)查閱 SocketEngine.h 頭文件l 類(lèi)繼承圖重疊結(jié)構(gòu)類(lèi)COverLapped重疊結(jié)構(gòu)模板類(lèi)CATLOverLapped服務(wù)線程類(lèi)C

27、ServiceThread讀寫(xiě)線程類(lèi)CServerSocketRSThreadTCP SOCKET 引擎接口ITCPSocketEngineTCP SOCKET 引擎管理接口ITCPSocketEngineManager網(wǎng)絡(luò)引擎類(lèi)CTCPSocketEngine連接對(duì)象回調(diào)接口IServerSocketItemSink數(shù)據(jù)隊(duì)列類(lèi)鉤子接口IQueueServiceSink服務(wù)線程類(lèi)CServiceThread應(yīng)答線程類(lèi)CSocketAcceptThread3.3 數(shù)據(jù)庫(kù)引擎DataBaseEngine模塊設(shè)計(jì)3.3.1 基本設(shè)計(jì)概念數(shù)據(jù)庫(kù)引擎建立數(shù)據(jù)隊(duì)列服務(wù),接受外部數(shù)據(jù)庫(kù)事件數(shù)據(jù)輸入,并調(diào)用外

28、部數(shù)據(jù)庫(kù)處理鉤子方法處理.且提供數(shù)據(jù)庫(kù)幫助類(lèi)對(duì)象,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)訪問(wèn),數(shù)據(jù)訪問(wèn)技術(shù)采用ADO.3.3.2 類(lèi)與接口設(shè)計(jì)l 接口設(shè)計(jì)IADOError數(shù)據(jù)庫(kù)錯(cuò)誤接口模塊Database繼承IADOError IUnknownEx實(shí)現(xiàn)數(shù)據(jù)成員名稱(chēng)說(shuō)明方法virtual LPCTSTR _cdecl GetErrorDescribe()說(shuō)明獲取錯(cuò)誤描述參數(shù)返回描述錯(cuò)誤的文本字符串舉例virtual enADOErrorType _cdecl GetErrorType()說(shuō)明獲取錯(cuò)誤類(lèi)型參數(shù)返回錯(cuò)誤類(lèi)型的枚舉值舉例IDataBase數(shù)據(jù)庫(kù)連接并訪問(wèn)接口模塊Database繼承IDataBase IUnk

29、nownEx實(shí)現(xiàn)數(shù)據(jù)成員名稱(chēng)說(shuō)明方法virtual bool _cdecl OpenConnection()說(shuō)明打開(kāi)連接參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl CloseRecordset()說(shuō)明關(guān)閉記錄參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl CloseConnection()說(shuō)明關(guān)閉連接參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl TryConnectAgain(bool bFocusConnect, CComError * pComError)說(shuō)明重新連

30、接參數(shù)bool bFocusConnect 強(qiáng)制性連接標(biāo)記CComError * pComError 錯(cuò)誤保存返回操作成功返回ture,否則flase舉例virtual bool _cdecl SetConnectionInfo(LPCTSTR szIP, LPCTSTR szPipeName,WORD wPort, LPCTSTR szData, LPCTSTR szName, LPCTSTR szPass)說(shuō)明設(shè)置信息參數(shù)LPCTSTR szIP 數(shù)據(jù)庫(kù)服務(wù)器IP地址LPCTSTR szPipeName 數(shù)據(jù)庫(kù)命名實(shí)列通道WORD wPort 端口LPCTSTR szData 數(shù)據(jù)庫(kù)名稱(chēng)

31、LPCTSTR szName 訪問(wèn)用戶(hù)名LPCTSTR szPass 訪問(wèn)密碼返回操作成功返回ture,否則flase舉例virtual bool _cdecl IsConnectError()說(shuō)明判斷是否連接錯(cuò)誤參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl IsRecordsetOpened ()說(shuō)明判斷是否打開(kāi)記錄集參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl MoveToNext ()說(shuō)明往下移動(dòng)記錄游標(biāo)參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl MoveToF

32、irst()說(shuō)明移到開(kāi)頭參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl IsEndRecordset ()說(shuō)明是否結(jié)束參數(shù)返回操作成功返回ture,否則flase舉例virtual long _cdecl GetRecordCount ()說(shuō)明獲取數(shù)目參數(shù)返回操作成功返回記錄數(shù)目舉例virtual long _cdecl GetActualSize(LPCTSTR pszParamName)說(shuō)明獲取字段大小參數(shù)LPCTSTR pszParamName 參數(shù)名稱(chēng)返回操作成功返回字段大小舉例virtual long _cdecl BindToRecordse

33、t(CADORecordBinding * pBind)說(shuō)明綁定對(duì)象參數(shù)CADORecordBinding * pBind 數(shù)據(jù)庫(kù)記錄綁定對(duì)象指針?lè)祷夭僮鞒晒Ψ祷?舉例virtual long _cdecl NextRecordset ()說(shuō)明下一記錄集參數(shù)返回操作成功返回0舉例virtual bool _cdecl GetFieldValue ()說(shuō)明獲取記錄集的數(shù)據(jù)參數(shù)LPCTSTR lpFieldName 字段名稱(chēng)X & bValue 字段數(shù)據(jù)值返回操作成功返回true舉例virtual void _cdecl SetSPName(LPCTSTR pszSpName)說(shuō)明獲取存儲(chǔ)

34、過(guò)程名稱(chēng)參數(shù)LPCTSTR pszSpName 存儲(chǔ)過(guò)程名稱(chēng)返回舉例virtual void _cdecl AddParamter(LPCTSTR pszName, ADOCG:ParameterDirectionEnum Direction, ADOCG:DataTypeEnum Type, long lSize, _variant_t & vtValue)說(shuō)明添加參數(shù)參數(shù)LPCTSTR pszName 字段名稱(chēng)ADOCG:ParameterDirectionEnum Direction 參數(shù)輸入輸出方向標(biāo)記ADOCG:DataTypeEnum Type 參數(shù)類(lèi)型long lSize

35、 參數(shù)大小_variant_t & vtValue 參數(shù)值返回舉例virtual void _cdecl ClearAllParameters()說(shuō)明清除參數(shù)參數(shù)返回舉例virtual void _cdecl GetParameterValue(LPCTSTR pszParamName, _variant_t & vtValue)說(shuō)明獲取參數(shù)值參數(shù)LPCTSTR pszParamName 參數(shù)名稱(chēng)_variant_t & vtValue 參數(shù)返回值返回舉例virtual long _cdecl GetReturnValue()說(shuō)明獲取數(shù)據(jù)庫(kù)返回值參數(shù)返回舉例virtua

36、l bool _cdecl Execute(LPCTSTR pszCommand)說(shuō)明執(zhí)行語(yǔ)句參數(shù)LPCTSTR pszCommand SQL語(yǔ)句返回操作成功返回ture,否則為false舉例virtual bool _cdecl ExecuteCommand(bool bRecordset)說(shuō)明執(zhí)行命令參數(shù)bool bRecordset 是否返回記錄集返回操作成功返回ture,否則為false舉例IDataBaseSink數(shù)據(jù)庫(kù)鉤子接口模塊Database繼承IDataBaseSink IUnknownEx實(shí)現(xiàn)數(shù)據(jù)成員名稱(chēng)說(shuō)明方法virtual bool _cdecl StartServic

37、e(IUnknownEx * pIUnknownEx)說(shuō)明數(shù)據(jù)庫(kù)模塊啟動(dòng)參數(shù)IUnknownEx * pIUnknownEx 服務(wù)框架接口返回操作成功返回ture,否則false舉例virtual bool _cdecl StopService(IUnknownEx * pIUnknownEx)說(shuō)明數(shù)據(jù)庫(kù)模塊關(guān)閉參數(shù)IUnknownEx * pIUnknownEx 服務(wù)框架接口返回操作成功返回ture,否則false舉例virtual bool _cdecl OnDataBaseRequest(BYTE cbThreadIndex,const NTY_DataBaseEvent & D

38、ataBaseEvent, void * pDataBuffer, WORD wDataSize)說(shuō)明數(shù)據(jù)事件操作處理參數(shù)BYTE cbThreadIndex 線程索引const NTY_DataBaseEvent & DataBaseEvent 數(shù)據(jù)庫(kù)事件 void * pDataBuffer 數(shù)據(jù)指針 WORD wDataSize 數(shù)據(jù)大小返回操作成功返回ture,否則false 舉例IDataBaseEngine數(shù)據(jù)庫(kù)引擎接口模塊Database繼承IDataBaseEngine IUnknownEx實(shí)現(xiàn)數(shù)據(jù)成員名稱(chēng)說(shuō)明方法virtual bool _cdecl StartSer

39、vice(BYTE cbThreadCount)說(shuō)明啟動(dòng)服務(wù)參數(shù)BYTE cbThreadCount 數(shù)據(jù)庫(kù)線程數(shù)量返回操作成功返回ture,否則false舉例virtual bool _cdecl StopService()說(shuō)明停止服務(wù)參數(shù)返回操作成功返回ture,否則false舉例virtual bool _cdecl SetDataBaseSink(IUnknownEx * pIUnknownEx)說(shuō)明設(shè)置數(shù)據(jù)事件操作處理鉤子參數(shù)IUnknownEx * pIUnknownEx 鉤子指針?lè)祷夭僮鞒晒Ψ祷豻ure,否則false 舉例virtual void * _cdecl GetQue

40、ueService(const IID & Guid, DWORD dwQueryVer)說(shuō)明獲取接口參數(shù)onst IID & Guid 接口標(biāo)記DWORD dwQueryVer 查詢(xún)版本返回操作成功返回內(nèi)存指針,否則Null舉例l 類(lèi)設(shè)計(jì)CADOError數(shù)據(jù)庫(kù)錯(cuò)誤類(lèi)模塊Database繼承CADOError IADOError IUnknownEx實(shí)現(xiàn)IADOError數(shù)據(jù)成員名稱(chēng)說(shuō)明enADOErrorTypem_enErrorType錯(cuò)誤代號(hào)CStringm_strErrorDescribe; 錯(cuò)誤信息方法virtual LPCTSTR _cdecl GetErrorD

41、escribe()說(shuō)明獲取錯(cuò)誤描述參數(shù)返回描述錯(cuò)誤的文本字符串舉例virtual enADOErrorType _cdecl GetErrorType()說(shuō)明獲取錯(cuò)誤類(lèi)型參數(shù)返回錯(cuò)誤類(lèi)型的枚舉值舉例void SetErrorInfo(enADOErrorType enErrorType, LPCTSTR pszDescribe)說(shuō)明設(shè)置錯(cuò)誤參數(shù)enADOErrorType enErrorType 錯(cuò)誤類(lèi)型的枚舉值LPCTSTR pszDescribe 描述錯(cuò)誤的文本字符串返回舉例CDataBase數(shù)據(jù)庫(kù)連接并訪問(wèn)類(lèi)模塊Database繼承CDataBase IDataBase IUnknown

42、Ex實(shí)現(xiàn)IDataBase數(shù)據(jù)成員名稱(chēng)說(shuō)明CADOError m_ADOError; CStringm_strConnect; CStringm_strErrorDescribe;DWORDm_dwConnectCount;DWORDm_dwConnectErrorTime; const DWORDm_dwResumeConnectCount; const DWORDm_dwResumeConnectTime; _CommandPtrm_DBCommand; _RecordsetPtrm_DBRecordset;_ConnectionPtr m_DBConnection;錯(cuò)誤對(duì)象連接字符串錯(cuò)誤

43、信息重試次數(shù)錯(cuò)誤時(shí)間恢復(fù)次數(shù)恢復(fù)時(shí)間命令對(duì)象記錄集對(duì)象數(shù)據(jù)庫(kù)連接對(duì)象方法virtual bool _cdecl OpenConnection()說(shuō)明打開(kāi)連接參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl CloseRecordset()說(shuō)明關(guān)閉記錄參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl CloseConnection()說(shuō)明關(guān)閉連接參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl TryConnectAgain(bool bFocusConnect, CComError

44、 * pComError)說(shuō)明重新連接參數(shù)bool bFocusConnect 強(qiáng)制性連接標(biāo)記CComError * pComError 錯(cuò)誤保存返回操作成功返回ture,否則flase舉例virtual bool _cdecl SetConnectionInfo(LPCTSTR szIP, LPCTSTR szPipeName,WORD wPort, LPCTSTR szData, LPCTSTR szName, LPCTSTR szPass)說(shuō)明設(shè)置信息參數(shù)LPCTSTR szIP 數(shù)據(jù)庫(kù)服務(wù)器IP地址LPCTSTR szPipeName 數(shù)據(jù)庫(kù)命名實(shí)列通道WORD wPort 端口LPC

45、TSTR szData 數(shù)據(jù)庫(kù)名稱(chēng) LPCTSTR szName 訪問(wèn)用戶(hù)名LPCTSTR szPass 訪問(wèn)密碼返回操作成功返回ture,否則flase舉例virtual bool _cdecl IsConnectError()說(shuō)明判斷是否連接錯(cuò)誤參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl IsRecordsetOpened ()說(shuō)明判斷是否打開(kāi)記錄集參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl MoveToNext ()說(shuō)明往下移動(dòng)記錄游標(biāo)參數(shù)返回操作成功返回ture,否則flase舉例virtual b

46、ool _cdecl MoveToFirst()說(shuō)明移到開(kāi)頭參數(shù)返回操作成功返回ture,否則flase舉例virtual bool _cdecl IsEndRecordset ()說(shuō)明是否結(jié)束參數(shù)返回操作成功返回ture,否則flase舉例virtual long _cdecl GetRecordCount ()說(shuō)明獲取數(shù)目參數(shù)返回操作成功返回記錄數(shù)目舉例virtual long _cdecl GetActualSize(LPCTSTR pszParamName)說(shuō)明獲取字段大小參數(shù)LPCTSTR pszParamName 參數(shù)名稱(chēng)返回操作成功返回字段大小舉例virtual long _cd

47、ecl BindToRecordset(CADORecordBinding * pBind)說(shuō)明綁定對(duì)象參數(shù)CADORecordBinding * pBind 數(shù)據(jù)庫(kù)記錄綁定對(duì)象指針?lè)祷夭僮鞒晒Ψ祷?舉例virtual long _cdecl NextRecordset ()說(shuō)明下一記錄集參數(shù)返回操作成功返回0舉例virtual bool _cdecl GetFieldValue ()說(shuō)明獲取記錄集的數(shù)據(jù)參數(shù)LPCTSTR lpFieldName 字段名稱(chēng)X & bValue 字段數(shù)據(jù)值返回操作成功返回true舉例virtual void _cdecl SetSPName(LPCTST

48、R pszSpName)說(shuō)明獲取存儲(chǔ)過(guò)程名稱(chēng)參數(shù)LPCTSTR pszSpName 存儲(chǔ)過(guò)程名稱(chēng)返回舉例virtual void _cdecl AddParamter(LPCTSTR pszName, ADOCG:ParameterDirectionEnum Direction, ADOCG:DataTypeEnum Type, long lSize, _variant_t & vtValue)說(shuō)明添加參數(shù)參數(shù)LPCTSTR pszName 字段名稱(chēng)ADOCG:ParameterDirectionEnum Direction 參數(shù)輸入輸出方向標(biāo)記ADOCG:DataTypeEnum T

49、ype 參數(shù)類(lèi)型long lSize 參數(shù)大小_variant_t & vtValue 參數(shù)值返回舉例virtual void _cdecl ClearAllParameters()說(shuō)明清除參數(shù)參數(shù)返回舉例virtual void _cdecl GetParameterValue(LPCTSTR pszParamName, _variant_t & vtValue)說(shuō)明獲取參數(shù)值參數(shù)LPCTSTR pszParamName 參數(shù)名稱(chēng)_variant_t & vtValue 參數(shù)返回值返回舉例virtual long _cdecl GetReturnValue()說(shuō)明獲取數(shù)據(jù)庫(kù)返回值參數(shù)返回舉例virtual bool _cdecl E

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論