C++学习之游戏服务器开发②zinx学习

目录

1.zinx框架建议用法

2.三层结构重构原有功能

3.实现三层结构回显

4.添加关闭输出功能

5.添加日期前缀功能

6.tcp数据适配

7.tcp通道实现

8.协议层记录消息来源


1.zinx框架建议用法

阶段一:学习使用框架
阶段二:使用框架实现游戏业务
阶段三:写框架
阶段四:商业化部署
学习使用框架的方法:
读文档
装环境
写用例
zinx 描述
zinx 框架是一个处理多路 IO 的框架。在这个框架中提供了若干抽象类,分别在
IO 处理的多个阶段生效。开发者可以重写抽象类中的虚函数完成自己需求的处
理功能。

2.三层结构重构原有功能

zinx 框架的使用步骤
1. ZinxKernel::ZinxKernelInit() 初始化框架
2. 写类继承 AZinxHandler ,重写虚函数,在函数中对参数进行处理
(比如将参数内容打印到标准输出)
3. 写类继承 Ichannel ,重写虚函数完成数据收发,重写
GetInputNextStage 函数,返回第二步创建类的对象
4. 添加步骤 3 类创建的对象到框架中
5. 运行框架
标准输入回显标准输出的编写思路
1. 创建三个类:标准输入类,回显类,标准输出类
2. 重写标准输入类的读取函数
3. 重写回显类处理函数
4. 重写标准输出类的写出函数
5. 创建以上三个类的全局对象(堆对象),添加通道对象到框架
kernel
6. 运行框架

3.实现三层结构回显

添加命令处理类
1. 创建命令处理类继承 AzinxHandler ,重写处理函数和获取下一个处
理环节的函数
2. 处理函数内,根据输入内容不同,要么添加输出通道,要么摘除输
出通道
3. 获取下一个处理环节函数中,指定下一个环节是退出或回显
4. 设定输入通道的下一个环节是该类对象
添加日期前缀
1. 创建添加日期类,继承 AzinxHandler 。重写处理函数和获取下一环
节函数
2. 处理函数:将日期和输入字符串拼接后, new 一个对象返回
3. 获取下一环节函数:返回回显对象
4. 在命令处理类的处理函数中:根据输入命令设置当前是否要添加前
缀的状态位
5. 在命令处理类的获取下一环节函数中,判断当前状态,需要添加前
-- 》返回添加日期前缀的对象;不需要添加前缀 -- 》返回回显对

4.添加关闭输出功能

需要调用的框架静态函数
初始化,去初始化 ZinxKernel::ZinxKernelInit()
ZinxKernel::ZinxKernelFini()
运行框架 ZinxKernel::Zinx_Run()
通道添加和摘除 ZinxKernel::Zinx_Add_Channel()
ZinxKernel::Zinx_Del_Channel()
退出框架 ZinxKernel::Zinx_Exit()

5.添加日期前缀功能

多个 AzinxHandler 对象之间的信息传递
数据封装成 IzinxMsg 类在多个 AzinxHandler 对象之间传递
使用时,要现将 IZinxMsg 类型引用动态转换成所需类型引用
zinx 框架处理数据的本质
将数据在多个 AzinxHandler 对象之间传递,挨个处理
传递的规则通过重写 GetNextHandler 函数定义

6.tcp数据适配

三层结构重构原有功能
1. 自定义消息类,继承 UserData ,添加一个成员变量 szUserData
2. 定义多个 Role 类继承 Irole ,重写 ProcMsg 函数,进行不同处理 3. 定义 protocol 类,继承 Iprotocol ,重写四个函数,两个函数时原始
数据和用户数据之间的转换;另两个用来找消息处理对象和消息发
送对象。
4. 定义 channel 类,继承 Ichannel ,在 getnextinputstage 函数中返回协
议对象

7.tcp通道实现

添加关闭输出功能
1. 写一个关闭输出的角色类,摘除输出通道或添加输出通道
2. CmdMsg 用户数据类中添加开关标志,是否是命令标志
3. 在协议类中,根据输入字符串,设置开关标志和是否是命令的标志
4. 在协议类分发消息时,判断是否是命令,是命令则发给关闭输出角
色类,否则发给回显角色类

8.协议层记录消息来源

添加日期前缀管理功能
1. 写日期管理类,处理命令时,改变当前状态。处理非命令时,添加
日期前缀后不添加日期前缀后,将数据传递给下一环节( echo
象)
2. 初始化日期管理类时,设置 echo 对象为下一个环节
3. 修改命令识别类,命令消息传递给输出通道控制类,非命令消息传
递给日期前缀管理类
4. 设定输出通道控制类的下一个环节是日期前缀管理类
添加 TCP 方式的数据通信
1. 创建 tcp 数据通道类继承 ZinxTcpData ,重写 GetInputNextStage
数,返回协议对象
2. 创建 tcp 连接工厂类继承 IZinxTcpConnFact ,重写
CreateTcpDataChannel ,构造步骤 1 的对象
3. 创建 ZinxTCPListen 类的对象,指定端口号和工厂对象(步骤 2 定义
的类的对象),添加到 kernel

你可能感兴趣的:(学习,游戏,c++)