基本设计概念和处理流程
调用模型
模仿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 |
CTCPSocketEngineCDataBaseEngineCAttemperEngine |
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
|
接口实现 |