Zinx框架-游戏服务器开发001:zinx框架的安装

2023-11-03 10:28

本文主要是介绍Zinx框架-游戏服务器开发001:zinx框架的安装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1 zinx下载地址
    • 1.1 zinx框架的源码路径:
    • 1.2 安装好之后动态库的位置
  • 2 Zinx框架运行的基本概况
  • 3 测试Zinx-框架的基本使用
    • 3.0 流程预览
    • 3.1 初始化框架
    • 3.2 标准输入回显标准输出的编写思路
      • 3.2.1 回显Echo
      • 3.2.2 写标准输入stdin通道类,用通道输入-通过 Ichannel 继承
      • 3.2.3 标准输出通道输出-通过 Ichannel 继承
    • 3.3 将通道对象添加到框架
    • 3.4 添加命令处理类
      • 3.4.1 GetNextHandler
      • 3.4.2 CmdHandler
      • 3.4.3 ExitFramework
      • 3.4.4 AddDate
    • 3.6 总览

1 zinx下载地址

1.1 zinx框架的源码路径:

https://github.com/marklion/zinx.git

1.2 安装好之后动态库的位置

cp libzinx.so /usr/lib/
cp *.h /usr/include/

2 Zinx框架运行的基本概况

在这里插入图片描述

3 测试Zinx-框架的基本使用

3.0 流程预览

+----------------+               +------------------+
| console input  +-------------> |TestStdin::ReadFd |
+----------------+               +--------+---------+|||v+---------+----------+|Echo::InternelHandle|+---------+----------+||||v
+---------------+               +---------+----------+
| console output+<--------------+TestSTDOut::WriteFd |
+---------------+               +--------------------+

3.1 初始化框架

/*1-初始化框架*/ZinxKernel::ZinxKernelInit();

3.2 标准输入回显标准输出的编写思路

  1. 创建三个类:标准输入类,回显类,标准输出类
  2. 重写标准输入类的读取函数
  3. 重写回显类处理函数
  4. 重写标准输出类的写出函数
  5. 创建以上三个类的全局对象(堆对象),添加通道对象到框架 (kernel)
  6. 运行框架

3.2.1 回显Echo

从哪里输入的不用管,只需要关心参数。
IZinxMsg& _oInput 来自于上一个环节。

/*2-写功能处理类*/
class Echo :public AZinxHandler {virtual IZinxMsg* InternelHandle(IZinxMsg& _oInput) override{/*回显到标准输出*/GET_REF2DATA(BytesMsg, input, _oInput);//写一个标准输出类的通道,交给通道进行输出Ichannel* poSendOut = ZinxKernel::Zinx_GetChannel_ByInfo("stdout");if (NULL != poSendOut){ZinxKernel::Zinx_SendOut(input.szData, *poSendOut);}return nullptr;}virtual AZinxHandler* GetNextHandler(IZinxMsg& _oNextMsg) override{return nullptr;}
} *poEcho = new Echo();

3.2.2 写标准输入stdin通道类,用通道输入-通过 Ichannel 继承

/*3-写通道类*/
class TestStdin :public Ichannel {// 通过 Ichannel 继承virtual bool Init() override{return true;}virtual bool ReadFd(std::string& _input) override{cin >> _input;return true;}virtual bool WriteFd(std::string& _output) override{return false;}virtual void Fini() override{}virtual int GetFd() override{return 0;}virtual std::string GetChannelInfo() override{return "stdin";}virtual AZinxHandler* GetInputNextStage(BytesMsg& _oInput) override{return poCmd;}
};

注意这里,GetChannelInfo()只负责获取stdin,然后下一步交给回显poCmd做。这里需要一个poCmd,因此在3.2定义类的时候直接创建new了一个对象 *poEcho = new Echo();,作为全局对象。

virtual AZinxHandler* GetInputNextStage(BytesMsg& _oInput) override
{return poCmd;
}

3.2.3 标准输出通道输出-通过 Ichannel 继承

/*创建标准输出通道类*/
class TestStdout :public Ichannel {// 通过 Ichannel 继承virtual bool Init() override{return true;}virtual bool ReadFd(std::string& _input) override{return false;}virtual bool WriteFd(std::string& _output) override{cout << _output << endl;return true;}virtual void Fini() override{}virtual int GetFd() override{return 1;}virtual std::string GetChannelInfo() override{return "stdout";}virtual AZinxHandler* GetInputNextStage(BytesMsg& _oInput) override{return nullptr;}
} *poOut = new TestStdout();

3.3 将通道对象添加到框架

TestStdin* poStdin = new TestStdin();
ZinxKernel::Zinx_Add_Channel(*poStdin);
ZinxKernel::Zinx_Add_Channel(*poOut);

3.4 添加命令处理类

  1. 创建命令处理类继承AzinxHandler,重写处理函数和获取下一个处 理环节的函数
  2. 处理函数内,根据输入内容不同,要么添加输出通道,要么摘除输 出通道
  3. 获取下一个处理环节函数中,指定下一个环节是退出或回显
  4. 设定输入通道的下一个环节是该类对象

在这里插入图片描述

3.4.1 GetNextHandler

	virtual AZinxHandler* GetNextHandler(IZinxMsg& _oNextMsg) override{GET_REF2DATA(BytesMsg, oBytes, _oNextMsg);if (oBytes.szData == "exit"){return poExit;}else{if (0 == status){return poEcho;}else{return poAddDate;}}}
} *poCmd = new CmdHandler();

3.4.2 CmdHandler


class CmdHandler :public AZinxHandler {int status = 0;// 通过 AZinxHandler 继承virtual IZinxMsg* InternelHandle(IZinxMsg& _oInput) override{/*判断输入是否是open或close,执行不同操作*/GET_REF2DATA(BytesMsg, oBytes, _oInput);if (oBytes.szData == "open"){ZinxKernel::Zinx_Add_Channel(*poOut);return NULL;}else if (oBytes.szData == "close"){ZinxKernel::Zinx_Del_Channel(*poOut);return nullptr;}else if (oBytes.szData == "date"){status = 1;return nullptr;}else if (oBytes.szData == "cleardate"){status = 0;}return new BytesMsg(oBytes);}

3.4.3 ExitFramework

class ExitFramework :public AZinxHandler {// 通过 AZinxHandler 继承virtual IZinxMsg* InternelHandle(IZinxMsg& _oInput) override{GET_REF2DATA(BytesMsg, obyte, _oInput);if (obyte.szData == "exit"){ZinxKernel::Zinx_Exit();return NULL;}/*创建交给下一个环节处理的数据*/return new BytesMsg(obyte);}virtual AZinxHandler* GetNextHandler(IZinxMsg& _oNextMsg) override{return poEcho;}
} *poExit = new ExitFramework();

3.4.4 AddDate


class AddDate :public AZinxHandler {// 通过 AZinxHandler 继承virtual IZinxMsg* InternelHandle(IZinxMsg& _oInput) override{GET_REF2DATA(BytesMsg, oBytes, _oInput);time_t tmp;time(&tmp);string szNew = string(ctime(&tmp)) + oBytes.szData;BytesMsg* pret = new BytesMsg(oBytes);pret->szData = szNew;return pret;}virtual AZinxHandler* GetNextHandler(IZinxMsg& _oNextMsg) override{return poEcho;}
} *poAddDate = new AddDate();

3.6 总览

在这里插入图片描述

这篇关于Zinx框架-游戏服务器开发001:zinx框架的安装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/337533

相关文章

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

如何在pycharm安装torch包

《如何在pycharm安装torch包》:本文主要介绍如何在pycharm安装torch包方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录在pycharm安装torch包适http://www.chinasem.cn配于我电脑的指令为适用的torch包为总结在p

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA