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