法律状态公告日
法律状态信息
法律状态
2018-08-07
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F8/41 变更前: 变更后: 申请日:20150625
专利权人的姓名或者名称、地址的变更
2018-05-08
授权
授权
2015-11-25
实质审查的生效 IPC(主分类):G06F9/45 申请日:20150625
实质审查的生效
2015-10-28
公开
公开
技术领域
本发明涉及计算机编程语言以及计算机网络通讯领域,尤其涉及一种跨 语言转换网络数据包定义文件的处理系统及方法。
背景技术
目前计算机软件业界已有多种跨计算机编程语言、跨平台的网络通讯协 议,但仍有不少运营中的旧有计算机服务器软件,在使用传统的直接通过网 络传输C/C++结构体内存数据的方法。这种方法速度快、效率高,在相同平 台、相同编译配置所生成的C/C++程序间使用起来非常方便,因此在PC游戏 盛行的时期曾被大量使用。
目前,我国已经进入了移动互联网时代,大量移动互联网游戏软件客户 端已不再直接使用C/C++来进行游戏业务的编写,而是使用起了更方便、更 易用的脚本语言,如Lua语言、JavaScript语言等。但旧有的服务器软件仍 在线上运营中,新的移动互联网软件客户端需要与这些旧有的服务器软件相 通讯;这些旧有的服务器软件使用直接传输C/C++结构体内存数据的通讯方 法,通过C/C++结构体来描述网络数据包的定义,而其它编程语言无法直接 使用这些结构体定义。要在新的移动互联网软件客户端的Lua、JavaScript 等脚本语言中收发C/C++结构体内存数据网络包,就需要将C/C++结构体及 其在特定结构成员对齐方式下各成员变量的内存偏移量、长度等数据转换为 相应的脚本语言定义,以供脚本语言使用。而这一转换过程此前是由人力手 工完成的,不仅耗时耗力,而且容易出错。
发明内容
本发明所要解决的技术问题是提供一种跨语言转换网络数据包定义文 件的处理系统及方法,针对结构体网络数据包定义文件需用人力手工转换为 目标语言的定义文件的问题,提供了一种可自动化地完成这一转换过程的处 理系统及方法。
本发明解决上述技术问题的技术方案如下:一种跨语言转换网络数据包 定义文件的处理系统,包括解析模块、获取模块和语言转换模块,
所述解析模块,用于将网络数据包定义文件解析生成各个不同类型的分 析代码;
所述获取模块,用于对各个不同类型的分析代码进行编译生成可执行文 件,再执行所述可执行文件来获取分析代码中的定义参数;
所述语言转换模块,用于将获取的定义参数通过字符串格式化进行代码 转换,生成目标语言的定义文件。
字符串格式化是指把字符串(即文本)、数字(整数、浮点数等)等元 素,按照一定的格式(即整数输出、取N位小数输出、十六进制输出等格式), 组合成一个完整的代码转换格式,使系统处理数据的时候运行速度快速。
本发明的有益效果是:针对结构体网络数据包定义文件需用人力手工转 换为目标语言的定义文件的问题,提供了一种可自动化地完成这一转换过程 的处理系统,以供目标语言与旧有的网络数据包结构体(基于C/C++的网络 数据包定义文件)进行转换,该处理系统速度快,转换准确,不需人工参与, 节省了开发人员的时间,降低了此类互联网软件客户端的开发成本,提高了 开发效率。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述网络数据包定义文件包括宏定义内容、枚举类型定义内容 和结构体定义内容。
进一步,所述各个不同类型的分析代码包括宏定义分析代码、枚举类型 分析代码和结构体分析代码。
进一步,所述获取模块对各个不同类型的分析代码通过操作符typeid 和sizeof进行编译生成可执行文件,再执行所述可执行文件从而获取分析 代码中的定义参数,所述定义参数包括各成员变量的名称、类型、值和长度。。
进一步,所述定义参数还包括通过取地址相减法获取所述各成员变量的 内存偏移量的数据。
采用上述进一步方案的有益效果是:获取了相应的名称、类型、值、偏 移量等信息之后,马上就通过字符串格式代码转换为目标语言的定义,这样 可以不必再写这些信息的存储代码,处理速度快且效率高。
本发明解决上述技术问题的另一技术方案如下:一种跨语言转换网络数 据包定义文件的处理方法,包括如下步骤:
步骤S1:将网络数据包定义文件解析生成各个不同类型的分析代码;
步骤S2:对各个不同类型的分析代码进行编译生成可执行文件,再执行 所述可执行文件来获取分析代码中的定义参数;
步骤S3:将获取的定义参数通过字符串格式化进行代码转换,生成目标 语言的定义文件。
字符串格式化是指把字符串(即文本)、数字(整数、浮点数等)等元 素,按照一定的格式(即整数输出、取N位小数输出、十六进制输出等格式), 组合成一个完整的代码转换格式,使系统处理数据的时候运行速度快速。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述网络数据包定义文件包括宏定义内容、枚举类型定义内容 和结构体定义内容。
进一步,所述各个不同类型的分析代码包括宏定义分析代码、枚举类型 分析代码和结构体分析代码。
进一步,步骤S2中,对各个不同类型的分析代码通过操作符typeid和 sizeof进行编译生成可执行文件,再执行所述可执行文件从而获取分析代码 中的定义参数包括各成员变量的名称、类型、值和长度。
进一步,所述定义参数还包括通过取地址相减法获取所述各成员变量的 内存偏移量的数据。
采用上述进一步方案的有益效果是:获取了相应的名称、类型、值、偏 移量等信息之后,马上就通过字符串格式代码转换为目标语言的定义,这样 可以不必再写这些信息的存储代码,处理速度快且效率高。
本发明针对结构体网络数据包定义文件需用人力手工转换为目标语言 的定义文件的问题,提供了一种可自动化地完成这一转换过程的处理方法, 以供目标语言与旧有的网络数据包结构体(如基于C/C++的网络数据包定义 文件)进行转换,该处理方法速度快,转换准确,不需人工参与,节省了开 发人员的时间,降低了此类互联网软件客户端的开发成本,提高了开发效率。
附图说明
图1为本发明跨语言转换网络数据包定义文件的处理系统的模块框图;
图2为本发明跨语言转换网络数据包定义文件的处理方法的方法流程 图。
附图中,各标记所代表的部件名称如下:
1、解析模块,2、获取模块3、语言转换模块。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本 发明,并非用于限定本发明的范围。
如图1所示,一种跨语言转换网络数据包定义文件的处理系统,包括解 析模块1、获取模块2和语言转换模块3,
所述解析模块1,用于将网络数据包定义文件解析生成各个不同类型的 分析代码;
所述获取模块2,用于对各个不同类型的分析代码进行编译生成可执行 文件,再执行所述可执行文件来获取分析代码中的定义参数;
所述语言转换模块3,用于将获取的定义参数字符串格式化进行代码转 换,生成目标语言的定义文件。
所述网络数据包定义文件包括宏定义内容、枚举类型定义内容和结构体 定义内容。
所述各个不同类型的分析代码包括宏定义分析代码、枚举类型分析代码 和结构体分析代码。
所述获取模块对各个不同类型的分析代码通过操作符typeid和sizeof 进行编译生成可执行文件,再执行所述可执行文件从而获取分析代码中的定 义参数,所述定义参数包括各成员变量的名称、类型、值和长度。
所述定义参数还包括通过取地址相减法获取所述各成员变量的内存偏 移量的数据。
如图2所示,一种跨语言转换网络数据包定义文件的处理方法,包括如 下步骤:
步骤S1:将网络数据包定义文件解析生成各个不同类型的分析代码;
步骤S2:对各个不同类型的分析代码进行编译生成可执行文件,再执行 所述可执行文件来获取分析代码中的定义参数;
步骤S3:将获取的定义参数通过字符串格式化进行代码转换,生成目标 语言的定义文件。
字符串格式化是指把字符串(即文本)、数字(整数、浮点数等)等元 素,按照一定的格式(即整数输出、取N位小数输出、十六进制输出等格式), 组合成一个完整的代码转换格式,使系统处理数据的时候运行速度快速。
步骤S2中,对各个不同类型的分析代码通过操作符typeid和sizeof 进行编译生成可执行文件,再执行所述可执行文件从而获取分析代码中的定 义参数包括各成员变量的名称、类型、值和长度。
所述定义参数还包括通过取地址相减法获取所述各成员变量的内存偏 移量的数据。
所述网络数据包定义文件包括宏定义内容、枚举类型定义内容和结构体 定义内容。
所述各个不同类型的分析代码包括宏定义分析代码、枚举类型分析代码 和结构体分析代码。
具体实施例:
以基于C/C++的网络数据包定义文件转换为Lua语言的定义文件为例,
步骤1:将C/C++的网络数据包定义文件包括宏定义内容、枚举类型定 义内容和结构体定义内容,将其对应解析生成宏定义分析代码、枚举类型分 析代码和结构体分析代码;
对于简单的数值与字符串类型的宏定义内容,对应转换为宏定义分析代 码,如表1所示:
表1
对于枚举类型定义内容,对应转换为枚举类型分析代码,如表2所示:
表2
对于结构体定义内容,对应转换为结构体分析代码,如表3所示:
表3
步骤2:对各个不同类型的分析代码进行编译生成可执行文件,再执行 所述可执行文件来获取分析代码中的定义参数;
对于简单的数值与字符串类型的宏定义分析代码,使用typeid()来获 取分析代码中所对应的类型,如表4所示:
表4
实现的部分代码如下:
对于枚举类型分析代码,通过sizeof()来获取分析代码中的获取其长 度,如表5所示:
表5
对于结构体分析代码,通过sizeof()来获取分析代码中的长度, typeid()获取所对应的类型,还需要获取该成员变量相对于结构体起点的 内存偏移量,具体实现是通过C++中的取址操作符“&”取地址并相减来实现 的,并通过取地址相减法获取所述各成员变量的内存偏移量的数据,如表6 所示:
表6
步骤3:将获取的定义参数通过“字符串格式化”代码进行转换成目标 语言的定义文件;
对简单的数值与字符串类型的宏定义参数转换为Lua语言的定义文件, 如表7所示:
表7
具体可以使用C++中的of stream::operator<<来完成这一转换过程, 实现的部分代码如下:
std::of stream&strm;//所需输出到的文件
std::string name;//名称
std::string type;//类型
std::string value;//值
if(type==”cstring”){
strm<<name<<“=\””<<value<<“\”;”;
}else{
strm<<name<<“=“<<value<<”\;”;
}
将枚举类型定义参数转换为Lua语言的定义文件,如表8所示:
表8
将结构体定义参数转换为Lua语言的定义文件,如表9所示:
表9
本处理方法和系统速度快,转换准确,不需人工参与,节省了开发人员 的时间,降低了此类互联网软件客户端的开发成本,提高了开发效率。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明 的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发 明的保护范围之内。
机译: 颜色转换定义方法,配置文件生成方法,颜色转换定义设备,配置文件生成设备,颜色转换定义程序存储介质和配置文件生成程序存储介质
机译: 颜色转换定义创建方法,配置文件创建方法,颜色转换定义创建设备,配置文件创建设备,颜色转换定义创建程序存储介质和配置文件创建程序存储介质
机译: 颜色转换定义创建方法,配置文件创建方法,颜色转换定义创建设备,配置文件生成器,颜色转换定义创建程序和配置文件创建程序