本文共 6357 字,大约阅读时间需要 21 分钟。
基本设计概念和处理流程
调用模型
模仿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 | 接口实现 |
作者:
出处: 蛮牛专栏: 简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。转载:http://www.cnblogs.com/geniusalex/p/3493399.html