文档章节

网狐架构及代码讲解

AndyZhouX
 AndyZhouX
发布于 2017/04/22 23:30
字数 1895
阅读 55
收藏 1
点赞 0
评论 0

基本设计概念和处理流程

 

调用模型

模仿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 : publicIAsynchronismEngineSink,
 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 : publicIAsynchronismEngineSink,
 public IClientSocketSink
接口实现

© 著作权归作者所有

共有 人打赏支持
AndyZhouX
粉丝 1
博文 97
码字总数 48113
作品 0
深圳
程序员
网狐6603棋牌源码编译通过,能正常运行,包含内核引擎,游戏引擎,网络服务

编译环境: VS2015 + sql server 2008 + Microsoft DirectX SDK (June 2010) 源码版本: 网狐6603 编译成功后,只运行了一个二人麻将。嘿嘿。。感觉这套棋牌源码还不错,用做二次开发,是绝佳的...

chen249191508 ⋅ 2017/07/05 ⋅ 0

皮皮准备玩点不一样的?地方棋牌+地方电视台推广模式

  据网狐了解到的消息,近日皮皮游戏与湖南广播电视台公共频道在长沙签署战略合作协议,正式成为芒果台战略合作伙伴。皮皮游戏CEO兼天神娱乐副总裁熊振出席签约仪式,并受湖南广播电视台邀...

网狐棋牌开发 ⋅ 2017/12/11 ⋅ 0

闲来皮皮双双切入金币模式,背后的商业逻辑是什么?

  自兴起以来,房卡模式在棋牌行业都是高盈利、高付费率的代名词。事实也确实如此,闲来和皮皮依据房卡模式超强的盈利能力,得以被上市公司天价收购。而当时间来到2017年下半年,这两家公司...

网狐棋牌开发 ⋅ 2017/12/27 ⋅ 0

博雅互动Q3营收1.64亿元,抓紧布局地方棋牌

  2017年11月,博雅互动公布 2017年前三季度未经审计的综合业绩, 截至2017年9月30日止,博雅互动营收5.76亿元,同比增长7.4%;纯利润2.16亿元,同比增长0.5% 。   博雅互动前三季度业绩总...

网狐棋牌开发 ⋅ 2017/11/27 ⋅ 0

地方棋牌史上最大估值,富控互动13.67亿收购百搭网络51%股权

  据网狐了解到的消息,富控互动15日晚间发布公告称,公司拟以136680万元对价现金收购宁波尚游网络科技合伙企业(有限合伙)持有的宁波百搭网络科技有限公司51%股权。相对应的,宁波百搭网...

网狐棋牌开发 ⋅ 2017/12/19 ⋅ 0

浙江苍南《龙港麻将》启示录,房卡模式怎样规避法律风险

  近日,一篇《浙江苍南现首例房卡模式麻将手游赌博,警方抓获涉案人员57人》的新闻稿传遍了整个手游圈,在棋牌从业人员中,更是引起了非常热烈的讨论。有媒体认为,此次事件是对房卡模式的...

网狐棋牌开发 ⋅ 2017/12/04 ⋅ 0

棋牌游戏服务器架构: 总体设计

首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构。网狐棋牌最令人印象深刻的是其稳定性和高网络负载。它的一份压力测试报告上指出:一台双核r的INTEL Xeon 2.8CPU加上2G内存和...

棋牌游戏服务器托管 ⋅ 2016/11/01 ⋅ 0

在音舞游戏中玩血战麻将是种怎样的体验?

  据网狐了解到的消息,音舞游戏《一起来跳舞》宣布在游戏版本中加入了血战麻将。玩家在休闲大厅中可以使用休闲币开设房间和好友一起玩麻将。网狐在第一时间体验了这款“奇葩”的音舞游戏,...

网狐棋牌开发 ⋅ 2017/12/15 ⋅ 0

晋中麻将游戏开发_晋中麻将规则

  晋中麻将起源于山西省中部的晋中市,在该地区广泛流行。晋中麻将采用麻将的136张牌胡牌之前需要先扣牌,其他的玩法大致与推倒胡相似。网狐具有丰富的晋中麻将游戏开发经验,下面总结了常...

网狐棋牌开发 ⋅ 2017/12/21 ⋅ 0

青岛麻将游戏开发_青岛麻将规则

  青岛麻将起源于山东省的地级市青岛市,是青岛地区一种地方特色麻将玩法。青岛麻将独具大三元,大四喜等趣味玩法,使用整副麻将的144张牌,因此算法十分的复杂,但玩法多样有趣,也十分的...

网狐棋牌开发 ⋅ 2017/11/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 19分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

楠木楠 ⋅ 31分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部