基本設計概念和處理流程
調用模型
模仿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 |
接口實現 |
