基本設(shè)計概念和處理流程
調(diào)用模型
模仿COM組件接口模式,利用面向?qū)ο笏枷攵鄳B(tài)性polymorphism,調(diào)用方保存著被調(diào)用方的基礎(chǔ)接口指針(interface or sink鉤子)(Pure Virtual Function),調(diào)用方直接調(diào)用接口指針內(nèi)聲明的純虛方法,而此純虛函數(shù)的具體邏輯由該接口的派生類實現(xiàn)。
示意圖:
基于事件驅(qū)動的數(shù)據(jù)處理模型
在系統(tǒng)功能設(shè)計中,針對網(wǎng)絡(luò)事件SocketEvent、數(shù)據(jù)庫事件DatabaseEvent、定時器事件TimerEvent……的數(shù)據(jù)處理,建立數(shù)據(jù)隊列服務(wù)QueueService,為每一隊列建立多個子線程QueueServiceThread處理。數(shù)據(jù)隊列服務(wù)提供添加事件數(shù)據(jù)的方法AddToQueue,設(shè)置數(shù)據(jù)隊列服務(wù)鉤子SetQueueServiceSink,由數(shù)據(jù)隊列服務(wù)鉤子QueueServiceSink執(zhí)行具體邏輯事件的數(shù)據(jù)處理。
示意圖:
再者,根據(jù)網(wǎng)絡(luò)、數(shù)據(jù)庫等特定功能,構(gòu)建網(wǎng)絡(luò)、數(shù)據(jù)庫等管理服務(wù),實現(xiàn)數(shù)據(jù)隊列服務(wù)鉤子QueueServiceSink方法,調(diào)度事件數(shù)據(jù)執(zhí)行外部處理接口,外部處理接口具體由二次開發(fā)用戶實現(xiàn)。
示意圖:
事件數(shù)據(jù)設(shè)計
軟件體系結(jié)構(gòu)(架構(gòu) Architecture)設(shè)計
功能模塊劃分
數(shù)據(jù)隊列服務(wù)QueueService模塊設(shè)計
基本設(shè)計概念
建立一個內(nèi)存鏈表,保存事件數(shù)據(jù),對外部提供方法(向鏈表添加事件數(shù)據(jù)并通知線程,同時啟動多個處理線程,從數(shù)據(jù)鏈表里獲取事件數(shù)據(jù),執(zhí)行外部鉤子方法進行處理。線程事件通知采用完成端口技術(shù)。
類與接口設(shè)計
COM接口 | 接口名 | 接口基類 | 接口實現(xiàn)類 |
A | 隊列引擎 | IQueueServiceEngine | CQueueServiceHelper |
B | 事件服務(wù) | IEventService | CEventServiceHelper |
C | 網(wǎng)絡(luò)引擎 | ITCPSocketEngine | CTCPSocketEngineHelper |
D | 定時器引擎 | ITimerEngine | CTimerEngineHelper |
E | 數(shù)據(jù)庫操作 | IDataBase | CDataBaseHelper |
F | 數(shù)據(jù)庫引擎 | IDataBaseEngine | CDataBaseEngineHelper |
I | 調(diào)度引擎 | IAttemperEngine | CAttemperEngineHelper |
G | 服務(wù)引擎 | IServiceEngine | CServiceEngineHelper |
K | 異步引擎 | IAsynchronismEngine | CAsynchronismEngineHelper |
自動清理參數(shù)輔助類 | CAutoCleanParameters | ||
自動關(guān)閉記錄集輔助類 | CAutoCloseRecord | ||
斷開數(shù)據(jù)庫連接輔助類 | CAutoCloseDataBase | ||
內(nèi)部接口 | 類別 | 接口 | 功能 | 繼承 | 實現(xiàn)類 |
數(shù)據(jù)隊列事件 (非組件實現(xiàn)) |
CQueueServiceEvent (IQueueService、CThreadLock) |
設(shè)置接口、發(fā)送通知事件 | |||
數(shù)據(jù)庫錯誤接口 | IADOError | 錯誤類型與描述 | : public IUnknownEx | CADOError | |
E | 數(shù)據(jù)庫連接接口 | IDataBase | 數(shù)據(jù)庫操作類 | : public IUnknownEx | CDataBase |
數(shù)據(jù)庫鉤子接口 | IDataBaseSink | 啟動關(guān)閉數(shù)據(jù)庫模塊、數(shù)據(jù)操作處理 | : public IUnknownEx | ||
F | 數(shù)據(jù)庫引擎接口 | IDataBaseEngine | 啟動停止服務(wù)、注冊鉤子、獲取接口 | : public IUnknownEx | CDataBaseEngine |
A | 數(shù)據(jù)隊列接口 | IQueueService | 加入數(shù)據(jù) | : public IUnknownEx | CQueueService |
數(shù)據(jù)隊列類鉤子接口 | IQueueServiceSink | 通知回調(diào)函數(shù) | : public IUnknownEx |
CTCPSocketEngine CDataBaseEngine CAttemperEngine |
|
A | 隊列類引擎接口 | IQueueServiceEngine | 開始服務(wù)、停止服務(wù)、設(shè)置接口、負荷信息 | : public IUnknownEx | CQueueService |
B | 事件服務(wù)引擎接口 | IEventService | 設(shè)置句柄、設(shè)置級別、事件通知 | : public IUnknownEx | CEventService |
G | 服務(wù)引擎接口 | IServiceEngine | 服務(wù)接口、配置接口、服務(wù)查詢、功能接口 | : public IUnknownEx | CServiceEngine |
D | 定時器引擎接口 | ITimerEngine | 設(shè)置定時器、刪除定時器 | : public IUnknownEx | CTimerEngine |
D | 定時器引擎接口 | ITimerEngineManager | 開始服務(wù)、停止服務(wù)、設(shè)置接口 | : public IUnknownEx | CTimerEngine |
C | TCP SOCKET 引擎接口 | ITCPSocketEngine | 發(fā)送、批量發(fā)送、關(guān)閉連接、允許群發(fā) | : public IUnknownEx | CTCPSocketEngine |
C | TCP SOCKET 引擎管理接口 | ITCPSocketEngineManager | 設(shè)置接口、端口、數(shù)目、啟動服務(wù)、停止服務(wù) | : public IUnknownEx | CTCPSocketEngine |
C | 連接對象回調(diào)接口 | IServerSocketItemSink | 應(yīng)答消息、讀取消息、關(guān)閉消息 | CTCPSocketEngine | |
調(diào)度模塊鉤子接口 | IAttemperEngineSink | 管理接口、事件接口(定時器、數(shù)據(jù)庫、網(wǎng)絡(luò)應(yīng)答讀取關(guān)閉) | : public IUnknownEx | ||
I | 調(diào)度引擎接口 | IAttemperEngine | 服務(wù)管理、設(shè)置鉤子、設(shè)置網(wǎng)絡(luò)、獲取接口 | : public IUnknownEx | CAttemperEngine |
K | 異步引擎接口 | IAsynchronismEngine | 管理接口(啟動停止服務(wù)、插入請求)、功能接口(注冊鉤子、取消注冊) | : public IUnknownEx | CAsynchronismEngine |
異步引擎鉤子接口 | IAsynchronismEngineSink | 啟動事件、停止事件、異步請求 | : public IUnknownEx | ||
接口實現(xiàn) | 類別 | 類 | 引用 |
網(wǎng)絡(luò)管理類 | CTCPSocketEngine |
CQueueService//隊列對象 CServerSocketItemPtrArray CQueueServiceEvent//通知組件 |
|
調(diào)度管理類 | CAttemperEngine |
ITCPSocketEngine//網(wǎng)絡(luò)引擎 IAttemperEngineSink//掛接接口CQueueService//隊列對象 |
|
數(shù)據(jù)庫對象 | CDataBase |
_CommandPtr//命令對象 _RecordsetPtr//記錄集對象 _ConnectionPtr//數(shù)據(jù)庫對象 |
|
數(shù)據(jù)庫管理類 | CDataBaseEngine |
CQueueService//隊列對象 IDataBaseSink//通知鉤子 |
|
事件服務(wù)類 | CEventService |
設(shè)置句柄-bool SetRichEditHwnd(HWND); 設(shè)置級別-void ConfigEventService(...); 事件通知-void ShowEventNotify(...); |
|
定時器引擎 | CTimerEngine | CTimerThread->(公共服務(wù)) | |
異步引擎接口 | CAsynchronismEngine |
friend class CControlWnd; friend class CMessageThread; CControlWnd//控制窗口 CThreadLock//線程同步 CDataStorage//數(shù)據(jù)存儲 CMessageThread//線程組件 |
|
服務(wù)引擎 | CServiceEngine |
CTimerEngine定時器引擎 CDataBaseEngine數(shù)據(jù)庫引擎 CAttemperEngine調(diào)度引擎 CTCPSocketEngine 網(wǎng)絡(luò)引擎 CAsynchronismEngine 異步引擎 |
|
數(shù)據(jù)隊列類 | CQueueService | CQueueServiceThread->(公共服務(wù)) | |
ADO 錯誤類 | CADOError | : public IADOError | |
內(nèi)部類:
意義 | 類 | 功能 | 繼承 | 引用 |
TCP SOCKET 類 | CServerSocketItem | SOCK對象和操作、完成端口、加密解密等 | ||
數(shù)據(jù)隊列事件 | CQueueServiceEvent | 事件通知,接口設(shè)置管理 | 代碼級引用 | |
窗口控制類 | CControlWnd |
//消息映射 OnAsynRequest//請求消息 |
: public CWnd | |
應(yīng)答線程對象 | CSocketAcceptThread | 運行函數(shù)(WSAAccept) | : public CServiceThread | |
讀寫線程類 | CServerSocketRSThread |
運行函數(shù)(GetQueuedCompletionStatus) 參數(shù)CServerSocketItem * |
: public CServiceThread | |
檢測線程類 | CSocketDetectThread | 運行函數(shù)(非阻塞)、檢測m_dwTickCount | : public CServiceThread | CTCPSocketEngine*//管理指針 |
隊列線程類 | CQueueServiceThread |
運行函數(shù)(GetQueuedCompletionStatus) 參數(shù)CQueueService * |
: public CServiceThread | |
消息線程 | CMessageThread | 運行函數(shù)(for CAsynchronismEngineSinkArray*) | : public CServiceThread | CAsynchronismEngine*//異步引擎 |
定時器線程 | CTimerThread | 運行函數(shù)(for CTimerItemPtr->GetCount();) | : public CServiceThread | CTimerEngine*//定時器引擎 |
數(shù)據(jù)存儲類 | CDataStorage | 內(nèi)存的管理 | 公共服務(wù)( dllimport class ) | |
線程對象類 | CServiceThread | 線程操作管理 | IServiceThread | 公共服務(wù)( dllimport class ) |
事件輸出類 | CEventTrace | 事件管理、通知、級別(靜態(tài)類) | 靜態(tài)全局 IEventService 以及其他處理函數(shù) | |
類別 | 類(非組件實現(xiàn)) | 接口(組件接口) | ||
數(shù)據(jù)庫引擎鉤子 | CDataBaseSink | IDataBaseSink | ||
調(diào)度引擎鉤子 | CAttemperEngineSink | IAttemperEngineSink | ||
客戶端網(wǎng)絡(luò)引擎+鉤子 | 客戶端SOCKET+=IClientSocketSink | IAsynchronismEngineSink |
中心服務(wù)器 | 名字 | 類名 | 繼承 | 類型 |
調(diào)度引擎鉤子 | CAttemperEngineSink | : public IAttemperEngineSink | 接口實現(xiàn) | |
數(shù)據(jù)庫引擎鉤子 | CDataBaseSink | : public IDataBaseSink | 接口實現(xiàn) | |
中心服務(wù)類 | CCenterService | 核心類 | ||
配置參數(shù) | CInitParamter | 核心類 | ||
連接信息結(jié)構(gòu) | CConnectItem | 數(shù)據(jù)管理 | ||
連接信息管理 | CConnectInfoManager | 數(shù)據(jù)管理 | ||
房間連接信息 | CConnectItem_GameServer | : public CConnectItem | 數(shù)據(jù)管理 | |
廣場連接信息 | CConnectItem_Plaza | : public CConnectItem | 數(shù)據(jù)管理 | |
應(yīng)用程序?qū)ο?/td> | CCenterServerApp | : public CWinApp | MFC | |
主對話框 | CCenterServerDlg | : public CDialog | MFC | |
配置對話框 | CSystemOptionDlg | : public CDialog | MFC | |
登陸、大廳 | 名字 | 類名 | 繼承 | 類型 |
調(diào)度引擎鉤子 | CAttemperEngineSink | : public IAttemperEngineSink | 接口實現(xiàn) | |
數(shù)據(jù)庫引擎鉤子 | CDataBaseSink | : public IDataBaseSink | 接口實現(xiàn) | |
中心連接類 | CCenterSocket |
: public IAsynchronismEngineSink, public IClientSocketSink |
接口實現(xiàn) | |
登錄服務(wù)類 | CLogonService | 核心類 | ||
配置參數(shù) | CInitParamter | 核心類 | ||
列表管理 | CServerList | 數(shù)據(jù)管理 | ||
列表信息 | CServerListInfo | 數(shù)據(jù)管理 | ||
應(yīng)用程序?qū)ο?/td> | CLogonServerApp | : public CWinApp | MFC | |
主對話框 | CLogonServerDlg | : public CDialog | MFC | |
配置對話框 | CSystemOptionDlg | : public CDialog | MFC | |
游戲裝載器 | 名字 | 類名 | 繼承 | 類型 |
服務(wù)參數(shù)類 | CServiceParameter | : public CDialog | MFC/核心類 | |
配置參數(shù) | CInitParamter | 核心類 | ||
應(yīng)用程序?qū)ο?/td> | CServiceLoaderApp | : public CWinApp | MFC | |
主對話框 | CServiceLoaderDlg | : public CDialog | MFC | |
配置對話框 | CSystemOptionDlg | : public CDialog | MFC | |
游戲服務(wù)框架 | 名字 | 類名 | 繼承 | 類型 |
調(diào)度引擎鉤子 | CAttemperEngineSink |
: public IAttemperEngineSink, public IGameServiceFrame |
接口實現(xiàn) | |
數(shù)據(jù)庫引擎鉤子 | CDataBaseSink | : public IDataBaseSink | 接口實現(xiàn) | |
中心連接類 | CCenterSocket |
: public IAsynchronismEngineSink, public IClientSocketSink |
接口實現(xiàn) |