CN106850531B - 一种基于模板的协议代码生成方法 - Google Patents
一种基于模板的协议代码生成方法 Download PDFInfo
- Publication number
- CN106850531B CN106850531B CN201611038095.1A CN201611038095A CN106850531B CN 106850531 B CN106850531 B CN 106850531B CN 201611038095 A CN201611038095 A CN 201611038095A CN 106850531 B CN106850531 B CN 106850531B
- Authority
- CN
- China
- Prior art keywords
- protocol
- template
- data packet
- class
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/03—Protocol definition or specification
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种基于模板的协议代码生成方法,将大量协议内容固化到独立于代码外的协议配置文件中,通过构建协议代码框架的模板,令模板读取该协议配置文件进而生成协议代码的方法。本发明简化了开发人员手工编写协议代码的工作,将工作重心真正转移到业务逻辑、页面设计等其它方面的设计与实现上。
Description
技术领域
本发明涉及一种协议代码的生成方法,特别是一种基于模板的协议代码生成方法。
背景技术
在网络技术的推动下,利用协议进行计算机间的相互通信或服务已成为当下非常成熟的技术。在使用协议进行通信代码的编写时,开发人员通常会对着协议内容,逐条编写代码。
当协议内容大量或经常改变时,以往的方法是纯人工编写代码,即开发人员拿到新的协议表,手动对比新协议和源代码逐句检查。该方法的优点是自由度高。缺点是,开发效率低,调试难度大,故障排查困难,系统难以维护。
发明内容
本发明目的在于提供一种基于模板的协议代码生成方法,解决以往手工编写协议代码,工作效率无法提高的问题。
一种基于模板的协议代码生成方法的具体步骤为:
第一步 搭建基于模板的协议代码生成系统
基于模板的协议代码生成系统,包括:配置文件构建模块、模板生成模块和代码生成模块。所述
配置文件构建模块的功能为:构建协议配置文件;
模板生成模块的功能为:构建协议代码生成模板;
代码生成模块的功能为:生成协议代码。
第二步 配置文件构建模块构建协议配置文件
通常实现协议中数据包的封装和解析需要构造三种类:数据包基类、包头类和数据包派生类。数据包基类负责提供对外统一的解析数据包接口,包头类负责封装和实现协议中包头相关字段,数据包派生类负责封装和实现具体的协议。配置文件构建模块负责数据包基类、包头类和数据包派生类三种类的配置文件构建,具体方式为:
包头类协议配置文件构建:将协议中包头相关的字段定义及说明逐行记录到一个文本文件中,这里称为包头类协议配置文件。
数据包派生类协议配置文件构建:将协议中除包头以外的数据内容字段定义及说明逐行记录到一个文本文件中,这里称为数据包派生类协议配置文件。
第三步 模板生成模块构建协议代码生成模板
数据包基类、包头类和数据包派生类的三种类,每个类的不同实现取决于报文内容字段的不同组织方式,因此,只要把报文内容字段单独拎出来定义即可实现不同子类代码的编写。
模板生成模块负责构建数据包基类、包头类和数据包派生类的协议代码生成模板,具体方式为:
数据包基类代码生成模板构建:用C#语言编写数据包基类协议代码框架,并将协议中英文名称作为配置参数,形成数据包基类代码生成模板,
包头类代码生成模板构建:用C#语言编写包头类协议代码框架,并将协议中英文名称、数据包长度最大值、数据包长度最小值作为配置参数;编写用于包头类字段定义、字段接口、属性设置/获取的函数。至此生成包头类代码生成模板。
数据包派生类代码生成模板构建:用C#语言编写数据包派生类模板文件,并将协议中英文名称、协议总线中英文名称、数据包长度最大值、数据包长度最小值作为配置参数;编写用于数据包类字段定义、字段接口、属性设置/获取的函数。至此生成数据包派生类代码生成模板。
第四步 代码生成模块生成协议代码
代码生成模板通过读取协议配置文件自动生成协议代码。
代码生成模块读取数据包基类模板,生成数据包基类C++代码。
代码生成模块读取包头类模板,生成数据包头类C++代码,读取过程中若遇到包含包头类协议配置文件的函数信息,则读取包头类协议配置文件,通过函数转换为C++代码。
代码生成模块读取数据包派生类模板,生成数据包派生类C++代码,读取过程中若遇到包含数据包派生类协议配置文件的函数信息,则读取数据包派生类协议配置文件,通过函数转换为C++代码。
通常协议中的数据包是递归定义的,即数据包=包头+内容,内容=子包头+子内容,以此类推。对于递归数据包,只需要更改配置参数和协议配置文件即可重新生成代码。当协议内容更改时,通过更改配置参数和协议配置文件也可以重新生成代码。
至此,完成基于模板的协议代码的生成。
本发明简化了开发人员手工编写协议代码的工作,将工作重心真正转移到业务逻辑、页面设计等其它方面的设计与实现上。
具体实施方式
一种基于模板的协议代码生成方法的具体步骤为:
第一步 搭建基于模板的协议代码生成系统
基于模板的协议代码生成系统,包括:配置文件构建模块、模板生成模块和代码生成模块。所述
配置文件构建模块的功能为:构建协议配置文件;
模板生成模块的功能为:构建协议代码生成模板;
代码生成模块的功能为:生成协议代码。
第二步 配置文件构建模块构建协议配置文件
通常实现协议中数据包的封装和解析需要构造三种类:数据包基类、包头类和数据包派生类。数据包基类负责提供对外统一的解析数据包接口,包头类负责封装和实现协议中包头相关字段,数据包派生类负责封装和实现具体的协议。配置文件构建模块负责数据包基类、包头类和数据包派生类三种类的配置文件构建,具体方式为:
包头类协议配置文件构建:将协议中包头相关的字段定义及说明逐行记录到一个文本文件中,这里称为包头类协议配置文件。
数据包派生类协议配置文件构建:将协议中除包头以外的数据内容字段定义及说明逐行记录到一个文本文件中,这里称为数据包派生类协议配置文件。
第三步 模板生成模块构建协议代码生成模板
数据包基类、包头类和数据包派生类的三种类,每个类的不同实现取决于报文内容字段的不同组织方式,因此,只要把报文内容字段单独拎出来定义即可实现不同子类代码的编写。
模板生成模块负责构建数据包基类、包头类和数据包派生类的协议代码生成模板,具体方式为:
数据包基类代码生成模板构建:用C#语言编写数据包基类协议代码框架,并将协议中英文名称作为配置参数,形成数据包基类代码生成模板,
包头类代码生成模板构建:用C#语言编写包头类协议代码框架,并将协议中英文名称、数据包长度最大值、数据包长度最小值作为配置参数;编写用于包头类字段定义、字段接口、属性设置/获取的函数。至此生成包头类代码生成模板。
数据包派生类代码生成模板构建:用C#语言编写数据包派生类模板文件,并将协议中英文名称、协议总线中英文名称、数据包长度最大值、数据包长度最小值作为配置参数;编写用于数据包类字段定义、字段接口、属性设置/获取的函数。至此生成数据包派生类代码生成模板。
第四步 代码生成模块生成协议代码
代码生成模板通过读取协议配置文件自动生成协议代码。
代码生成模块读取数据包基类模板,生成数据包基类C++代码。
代码生成模块读取包头类模板,生成数据包头类C++代码,读取过程中若遇到包含包头类协议配置文件的函数信息,则读取包头类协议配置文件,通过函数转换为C++代码。
代码生成模块读取数据包派生类模板,生成数据包派生类C++代码,读取过程中若遇到包含数据包派生类协议配置文件的函数信息,则读取数据包派生类协议配置文件,通过函数转换为C++代码。
通常协议中的数据包是递归定义的,即数据包=包头+内容,内容=子包头+子内容,以此类推。对于递归数据包,只需要更改配置参数和协议配置文件即可重新生成代码。当协议内容更改时,通过更改配置参数和协议配置文件也可以重新生成代码。
至此,完成基于模板的协议代码的生成。
Claims (1)
1.一种基于模板的协议代码生成方法,其特征在于具体步骤为:
第一步 搭建基于模板的协议代码生成系统
基于模板的协议代码生成系统,包括:配置文件构建模块、模板生成模块和代码生成模块;所述
配置文件构建模块的功能为:构建协议配置文件;
模板生成模块的功能为:构建协议代码生成模板;
代码生成模块的功能为:生成协议代码;
第二步 配置文件构建模块构建协议配置文件
通常实现协议中数据包的封装和解析需要构造三种类:数据包基类、包头类和数据包派生类;数据包基类负责提供对外统一的解析数据包接口,包头类负责封装和实现协议中包头相关字段,数据包派生类负责封装和实现具体的协议;配置文件构建模块负责数据包基类、包头类和数据包派生类三种类的配置文件构建,具体方式为:
包头类协议配置文件构建:将协议中包头相关的字段定义及说明逐行记录到一个文本文件中,这里称为包头类协议配置文件;
数据包派生类协议配置文件构建:将协议中除包头以外的数据内容字段定义及说明逐行记录到一个文本文件中,这里称为数据包派生类协议配置文件;
第三步 模板生成模块构建协议代码生成模板
数据包基类、包头类和数据包派生类的三种类,每个类的不同实现取决于报文内容字段的不同组织方式,因此,只要把报文内容字段单独拎出来定义即可实现不同子类代码的编写;
模板生成模块负责构建数据包基类、包头类和数据包派生类的协议代码生成模板,具体方式为:
数据包基类代码生成模板构建:用C#语言编写数据包基类协议代码框架,并将协议中的英文名称作为配置参数,形成数据包基类代码生成模板,
包头类代码生成模板构建:用C#语言编写包头类协议代码框架,并将协议中的英文名称、数据包长度最大值、数据包长度最小值作为配置参数;编写用于包头类字段定义、字段接口、属性设置/获取的函数;至此生成包头类代码生成模板;
数据包派生类代码生成模板构建:用C#语言编写数据包派生类模板文件,并将协议中的英文名称、协议总线中英文名称、数据包长度最大值、数据包长度最小值作为配置参数;编写用于数据包类字段定义、字段接口、属性设置/获取的函数;至此生成数据包派生类代码生成模板;
第四步 代码生成模块生成协议代码
代码生成模板通过读取协议配置文件自动生成协议代码;
代码生成模块读取数据包基类模板,生成数据包基类C++代码;
代码生成模块读取包头类模板,生成数据包头类C++代码,读取过程中若遇到包含包头类协议配置文件的函数信息,则读取包头类协议配置文件,通过函数转换为C++代码;
代码生成模块读取数据包派生类模板,生成数据包派生类C++代码,读取过程中若遇到包含数据包派生类协议配置文件的函数信息,则读取数据包派生类协议配置文件,通过函数转换为C++代码;
通常协议中的数据包是递归定义的,即数据包=包头+内容,内容=子包头+子内容,以此类推;对于递归数据包,只需要更改配置参数和协议配置文件即可重新生成代码;当协议内容更改时,通过更改配置参数和协议配置文件也可以重新生成代码;
至此,完成基于模板的协议代码的生成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611038095.1A CN106850531B (zh) | 2016-11-21 | 2016-11-21 | 一种基于模板的协议代码生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611038095.1A CN106850531B (zh) | 2016-11-21 | 2016-11-21 | 一种基于模板的协议代码生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106850531A CN106850531A (zh) | 2017-06-13 |
CN106850531B true CN106850531B (zh) | 2020-01-14 |
Family
ID=59146349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611038095.1A Active CN106850531B (zh) | 2016-11-21 | 2016-11-21 | 一种基于模板的协议代码生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106850531B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107704245A (zh) * | 2017-09-21 | 2018-02-16 | 深圳市麦斯杰网络有限公司 | 协议接入方法、装置及计算机可读存储介质 |
CN108984728B (zh) * | 2018-07-11 | 2020-11-27 | 北京奇艺世纪科技有限公司 | 一种代理类生成方法及装置 |
CN111221532A (zh) * | 2019-12-23 | 2020-06-02 | 北京轩宇信息技术有限公司 | 一种动态链接库的生成方法及装置 |
CN111338616A (zh) * | 2020-03-24 | 2020-06-26 | 北京自如信息科技有限公司 | 协议解析代码的生成方法、装置及电子设备 |
CN113377363B (zh) * | 2021-07-14 | 2022-03-08 | 深圳市集贤科技有限公司 | 对多种电控端私有协议自动生成源代码的云端实现方法 |
CN115373655B (zh) * | 2022-10-25 | 2023-02-07 | 中国人民解放军国防科技大学 | 一种基于标准化模板的信息协议代码自动生成方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6625804B1 (en) * | 2000-07-06 | 2003-09-23 | Microsoft Corporation | Unified event programming model |
CN104331292A (zh) * | 2014-11-03 | 2015-02-04 | 重庆邮电大学 | 一种车联网中间件协议转换的配置生成方法 |
CN106873949A (zh) * | 2015-12-11 | 2017-06-20 | 泰康保险集团股份有限公司 | 代码生成方法及其装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060036755A1 (en) * | 2004-05-07 | 2006-02-16 | Abdullah Ibrahim S | Meta-protocol |
-
2016
- 2016-11-21 CN CN201611038095.1A patent/CN106850531B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6625804B1 (en) * | 2000-07-06 | 2003-09-23 | Microsoft Corporation | Unified event programming model |
CN104331292A (zh) * | 2014-11-03 | 2015-02-04 | 重庆邮电大学 | 一种车联网中间件协议转换的配置生成方法 |
CN106873949A (zh) * | 2015-12-11 | 2017-06-20 | 泰康保险集团股份有限公司 | 代码生成方法及其装置 |
Non-Patent Citations (1)
Title |
---|
WYSIWIB: A Declarative Approach to Finding API protocols and bugs in Linux code;Julia L. Lawall等;《2009 IEEE/IFIP International Conference on Dependable Systems & Networks》;20090929;第43-52页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106850531A (zh) | 2017-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106850531B (zh) | 一种基于模板的协议代码生成方法 | |
CN106325969B (zh) | 需求变更的逆向追踪系统 | |
CN110955410B (zh) | 一种代码自动生成方法、装置、设备及介质 | |
CN108228180A (zh) | 基于可视化界面设计的自动代码生成方法及系统 | |
CN104317589A (zh) | 一种用于加载动态链接库的代码自动生成方法及装置 | |
GB2423387A (en) | Application-Generic Sequence Diagram Generator Driven by a Non-Proprietary Language | |
CN102801714B (zh) | 旁路式解析和还原tns协议中sql命令的方法 | |
CN111367524B (zh) | 枚举类型设计方法及装置 | |
CN110825364A (zh) | 一种基于树形结构的应用模板配置方法 | |
CN111124380A (zh) | 一种前端代码生成方法 | |
CN105677324A (zh) | 一种自动生成实体类代码的方法 | |
CN102521008B (zh) | 程序编译装置和程序编译方法 | |
CN106776779B (zh) | 基于Mac平台的JSON数据生成实体文件的方法 | |
CN103077038B (zh) | 动态生成和编译.net项目的方法 | |
CN103036877A (zh) | 一种基于tlv格式协议的编解码代码生成装置及方法 | |
CN106815181B (zh) | 一种InDesign排版的indd文件到Office文件的转换方法及装置 | |
CN111190587A (zh) | 一种基于jdbc自动生成工程化前端代码的方法及系统 | |
CN113094039B (zh) | 一种基于数据库表的代码自动生成系统 | |
WO2007076676A1 (fr) | Procede pour la production automatique de code de codage/decodage des unites de donnees de protocole (pdu) base sur une definition de notation de syntaxe abstraite numero 1 (asn.1) | |
CN110187886A (zh) | 一种文档网站生成方法及终端 | |
CN109979551A (zh) | 一种基于网页的电子病历文档的编辑器 | |
CN109062816A (zh) | 一种软件测试的方法、装置及设备 | |
CN102411498A (zh) | 一种实现数据模型的方法及图形化设计器 | |
CN112148263A (zh) | 前端标准框架及其生成方法、装置、设备及存储介质 | |
CN110445752A (zh) | 一种支持多种can设备并灵活解析各类can报文的实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |