CN100562008C - 消息处理系统及其处理方法 - Google Patents
消息处理系统及其处理方法 Download PDFInfo
- Publication number
- CN100562008C CN100562008C CNB2004100652618A CN200410065261A CN100562008C CN 100562008 C CN100562008 C CN 100562008C CN B2004100652618 A CNB2004100652618 A CN B2004100652618A CN 200410065261 A CN200410065261 A CN 200410065261A CN 100562008 C CN100562008 C CN 100562008C
- Authority
- CN
- China
- Prior art keywords
- message
- node
- tree
- thresholding
- read
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了消息处理系统及其处理方法,所述消息处理系统,包括消息结构分析单元,消息编码单元,消息解码单元和域值操作单元,其中:消息结构分析单元用于读取消息结构体定义源信息,在内存中构造树的结构;消息编码单元用于把域值从所述内存中的树中按后序遍历方法取出,并按照该消息所定义的对齐方式,放入到一指定内存数据块;消息解码单元用于按照给定的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上;域值操作单元用于读取或设置消息中给定位置的域值。采用本发明的技术方案,测试工具在处理新被测试对象的消息时候,不需添加该类消息的处理接口而重新设计测试工具。
Description
技术领域
本发明涉及一种消息处理方法,尤其涉及基于消息驱动的测试工具中的消息处理系统方法及其处理方法。
背景技术
在计算机软件系统中,进程之间的消息交互是基本的通信方法。基于消息的测试工具就是通过监听、拦截和比较消息来判断被测试单元工作是否正确。
在该类工具中,要完成消息交互、比较功能,就需要消息处理能力。消息的处理主要包括三个部分:编码、解码和设置域值。消息的编码主要完成把一个消息实例从其结构定义转化为网络传输过程中所需的字节流顺序内存块。消息的解码主要完成从网络字节流顺序的内存块转化消息实例结构。设置消息域值功能主要完成对消息中某个域值的编辑操作,通常用于构筑消息域值的分析器。
目前,在计算机通讯系统中,消息处理,通常采用的是针对每种消息定义设计一套消息处理接口。当程序中涉及到多种不同的复杂消息的时候,消息处理接口代码量大,难于维护。而且,在该类系统中,编写该消息处理代码工作枯燥、重复工作量大、调试困难、易出错。
虽然,在一些计算机通讯系统,采用了ASN.1(Abstract Syntax Notation抽象语法定义)定义不同系统之间的消息类型,并可以通过ASN.1编译器工具生成对应的消息处理接口,这在一定程度上解决了消息处理接口设计问题,抛开该编译器生成接口的运行效率问题,一类消息一套处理接口仍占用系统资源(内存)多,而且一个无法避免的问题事:有新的消息加入时,还是避免不了添加新的接口代码。
基于消息的测试工具的测试对象是所有以消息驱动的模块,该类模块可能是千差万别的,其所使用的消息结构也可能不相同,所以,当从一个测试对象转换到另一个测试对象时候,不可能因为测试用例中所处理的消息不同而重新设计测试工具。这就需要该类测试工具有处理新消息的扩展能力。显然,通过上述现有的常用消息接口设计和ASN.1设计方法都不能达到该目的。
发明内容
本发明所要解决的技术问题是为了克服现有测试工具的消息处理方法及系统的消息处理接口数量多、占用系统资源多,在有新的消息加入时,需要添加新的接口代码的技术问题,提出一种消息处理方法及其系统。
实现本发明所要解决的技术问题而采取的技术方案概括如下:
一种消息处理系统,包括消息结构分析单元,消息编码单元,消息解码单元和域值操作单元,其中:
消息结构分析单元用于读取消息结构体定义源信息,在内存中构造树的结构;
消息编码单元用于把域值从所述内存中的树中按后序遍历方法取出,并按照消息所定义的对齐方式,放入到一指定内存数据块;
消息解码单元用于按照定义的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上;
域值操作单元用于读取或设置消息中给定位置的域值。
其中,所述消息编码单元还用于将所述取出的域值作字节流顺序转换;所述消息解码单元还用于将内存数据块的消息作字节流顺序转换。
其中,所述消息结构分析单元还包括词法分析器、语法分析器、语义分析器,其中:
语法分析器按照消息结构体定义源信息所定义的语法规则,进行语法分析,在内存中生成消息结构体的树结构;
词法分析器按照消息结构体定义源信息所定义的词法规则,进行词法分析,其分析结果用于输入到语法分析器;
语义分析器按照消息结构体定义源信息中所遵循的语义,对语法分析器生成的树节点作语义检测、分析和记录。
其中,所述消息结构分析单元执行以下动作:
1)启动语法分析器;
2)语法分析器驱动词法分析器读入消息结构体定义源信息的一个词和其属性,并输入到语法分析器中;如果,读入的词为空,则读消息结构体定义源信息到结束位置,跳转到本工作流程第8)步;
3)语法分析器按照至顶向下的分析方法,作语法匹配,并规约;
4)如果匹配的语法为一个结构体声明开始位置,则创建树根节点,记录下结构体声明属性,包括:消息名、对齐方式,并把该树根节点作为一个子节点插入到其上层树中,如果上层树还没有建立,则该树根节点作为“消息根节点”,设置该树根节点为“当前根节点”;如果是消息的开始声明位置,该树根节点也是整个“消息根节点”;之后,跳转到第2)步继续执行;
5)如果匹配的语法为一个结构体声明的结束位置,则把“当前根节点”的父节点设置为“当前根节点”;之后,跳转到第2)步继续执行;
6)如果匹配的语法为结构体的一个域,则创建一个树节点并把该域的所有信息记录到该树节点中,包括:域名、类型、长度,之后把该树节点作为一个子节点插入到“当前根节点”中;
7)如果匹配的语法中包括了一个语义规则,那么在该语义规则对应的树节点上记录下该语义规则;之后,跳转到第2)步继续执行;
8)输出上述7个步骤所形成的树。
其中,所述消息编码单元执行以下动作:
1)从内存中树的根节点中读入该消息的对齐方式;
2)采用后序遍历方式从树中读入第一个节点;
3)判断该节点是否为叶子节点,如果该节点是叶子节点,则执行第4)步;如果不是叶子节点,则跳转到第10)步;
4)从该叶子节点中读入域名、域值、类型、语义规则和其他属性;
5)计算该域值:判断该域值与其他域的语义相关性,如果该域值已经定义,直接使用该域值即可;如果该域值与其它域的类型有相关性,从树中读取相关的域类型,根据规则,计算该域值;
6)根据该系统的设计需要,把该域值作字节流顺序转换;系统根据需要,对域值进行字节流顺序转换,用于具有不同数据存储方式的系统之间的消息传输;
7)按照所述对齐方式调整写指针,该写指针是指向输出内存块的指针;
8)通过写指针,把域值写入内存块中;
9)从树中读入下一个节点;
10)如果该节点为叶子节点,跳转到第3)步;如果该节点为整棵树的根节点,输出该内存块,本工作流程结束;其他情况跳转到第9)步。
其中,所述消息解码单元执行以下动作:
1)读入消息声明,构造该消息的内存树;
2)读入该消息的对齐方式;
3)按照后序遍历方法,从该内存树上取出第一个叶子节点,设置为当前叶子节点;
4)判断当前叶子节点是否为树的根节点,同时判断该内存数据块的读指针是否为内存数据块的结束位置,如果满足其一条件,则解码过程结束;若都不是,输出为内存中的树;
5)据步骤2)所记录的对齐方式,调整读指针;
6)从读指针开始位置,读入一定长度的数据;该长度根据当前叶子节点中所记录的属性计算而得;同时移动读指针;
7)根据当前叶子节点所记录域的属性,判断所述数据是否需要字节流顺序转换,如果需要,把读入的所述数据作字节流顺序转换;
8)把所述数据赋值到当前叶子节点中;
在树中,从该叶子节点位置,按后序遍历,读下一个叶子节点,并设置为当前叶子节点;之后,跳转到第4)步。
其中,所述域值操作单元执行以下动作:
1)从输入域位置信息中取出第一个域名,该域名为消息名;
2)从保存消息树的链表中找到该域名的消息树,并设置该消息树的根节点为当前节点;
3)从输入域位置信息中取出下一个域名;
4)从当前节点的所有子节点中,按照从左到右的顺序,查找与该域名相匹配的节点,找到后,设置该节点为当前节点;
5)判断是否读入到输入域位置信息中的最后位置;如果是最后位置,当前节点就是输入所指定操作的域,返回叶子节点,结束;否则,跳转到第3)步。
一种消息处理方法,包括以下步骤:
1)输入消息结构体定义源信息,在内存中构造树的结构;
2)把域值从所述内存中的树中按后序遍历方法取出,并按照消息所定义的对齐方式,放入到一指定内存数据块;
3)按照定义的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上。
其中,所述把域值从所述内存中的树中按后序遍历方法取出,并按照消息所定义的对齐方式,放入到一指定内存数据块的步骤中还包括将所述取出的域值作字节流顺序转换的步骤;
所述按照定义的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上的步骤中还包括将内存数据块的消息作字节流顺序转换的步骤。
优选地,还包括以下步骤:
1)从输入域位置信息中取出第一个域名,该域名为消息名;
2)从保存消息树的链表中找到该域名的消息树,并设置该消息树的根节点为当前节点;
3)从输入域位置信息中取出下一个域名;
4)从当前节点的所有子节点中,按照从左到右的顺序,查找与该域名相匹配的节点,找到后,设置该节点为当前节点;
5)判断是否读入到输入域位置信息中的最后位置;如果是最后位置,当前节点就是输入所指定操作的域,返回叶子节点,结束;否则,跳转到第3)步。
其中,所述输入消息结构体定义源信息,在内存中构造树的结构的步骤中还包括以下步骤:
1)启动语法分析器;
2)语法分析器驱动词法分析器读入消息结构体定义源信息的一个词和其属性,并输入到语法分析器中;如果,读入的词为空,则读消息结构体定义源信息到结束位置,跳转到本工作流程第8)步;
3)语法分析器按照至顶向下的分析方法,作语法匹配,并规约;
4)如果匹配的语法为一个结构体声明开始位置,则创建树根节点,记录下结构体声明属性,包括:消息名、对齐方式,并把该树根节点作为一个子节点插入到其上层树中,如果上层树还没有建立,则该树根节点作为“消息根节点”,设置该树根节点为“当前根节点”;如果是消息的开始声明位置,该树根节点也是整个“消息根节点”;之后,跳转到第2)步继续执行;
5)如果匹配的语法为一个结构体声明的结束位置,则把“当前根节点”的父节点设置为“当前根节点”;之后,跳转到第2)步继续执行;
6)如果匹配的语法为结构体的一个域,则创建一个树节点并把该域的所有信息记录到该树节点中,包括:域名、类型、长度,之后把该树节点作为一个子节点插入到“当前根节点”中;
7)如果匹配的语法中包括了一个语义规则,那么在该语义规则对应的树节点上记录下该语义规则;之后,跳转到第2)步继续执行;
8)输出上述7个步骤所形成的树,结束本工作流程。
其中,所述把域值从所述内存中的树中按后序遍历方法取出,并按照该消息所定义的对齐方式,放入到一指定内存数据块的步骤中还包括以下步骤:
1)从所述内存中树的根节点中读入消息的对齐方式;
2)采用后序遍历方式从树中读入第一个节点;
3)判断该节点是否为叶子节点,如果该节点是叶子节点,则执行第4)步;如果不是叶子节点,则跳转到第10)步;
4)从该叶子节点中读入域名、域值、类型、语义规则和其他属性;
5)计算该域值:判断该域值与其他域的语义相关性;如果该域值已经定义,直接使用该域值即可;如果该域值与其它域的类型有相关性,从树中读取相关的域类型,根据规则,计算该域值;
6)根据系统的设计需要,把该域值作字节流顺序转换;系统根据需要,对域值进行字节流顺序转换,用于具有不同数据存储方式的系统之间的消息传输;
7)按照所述对齐方式调整写指针,该写指针是指向输出内存块的指针;
8)通过写指针,把域值写入内存块中;
9)从树中读入下一个节点;
10)如果该节点为叶子节点,跳转到第3)步;如果该节点为整棵树的根节点,输出该内存块,本工作流程结束;其他情况跳转到第9)步。
其中,所述按照定义的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上的步骤中还包括以下步骤:
1)读入消息声明,构造该消息的内存树;
2)读入该消息的对齐方式;
3)按照后序遍历方法,从该内存树上取出第一个叶子节点,设置为当前叶子节点;
4)判断当前叶子节点是否为树的根节点,同时判断该内存数据块的读指针是否为内存数据块的结束位置,如果满足其一条件,则解码过程结束;若都不是,输出为内存中的树;
5)根据步骤2)所记录的对齐方式,调整读指针;
6)从读指针开始位置,读入一定长度的数据;该长度根据当前叶子节点中所记录的属性计算而得;同时移动读指针;
7)根据当前叶子节点所记录域的属性,判断所述数据是否需要字节流顺序转换,如果需要,把读入的所述数据作字节流顺序转换;
8)把所述数据赋值到当前叶子节点中;
在树中,从该叶子节点位置,按后序遍历,读下一个叶子节点,并设置为当前叶子节点;之后,跳转到第4)步。
采用本发明技术方案,测试工具在处理新被测试对象的消息时候,不需添加该类消息的处理接口而重新设计测试工具。同时,避免了一类消息对应一类处理接口的设计方法,提供了一套通用的消息处理技术,从而简化了消息处理接口复杂度,提高了系统资源利用率,降低了开发的劳动强度,方便了消息处理接口调试。
附图说明
图1示出了本发明提供的消息处理系统的示意图;
图2示出了本发明提供的结构体分析单元的结构示意图;
图3示出了本发明提供的结构体分析单元的工作流程图;
图4示出了本发明提供的基于树的消息编码单元处理的工作流程图;
图5示出了本发明提供的基于树的消息解码单元处理的工作流程图;
图6示出了本发明提供的域值操作单元处理的工作流程图。
具体实施方式
下面将结合附图,举例说明本发明的具体实施方式。
本发明提供的消息处理系统包括消息结构分析单元,消息编码单元,消息解码单元和域值操作单元。本发明的基于消息驱动的测试工具的消息处理方法基本内容为:消息结构导入、基于树的消息编码、基于树的消息解码和对消息中的域值的操作。本发明的消息处理系统的示意图如图1所示,以下具体说明消息处理系统的实施方式。
消息结构导入由消息结构体分析单元完成。如附图2所示,该结构体分析单元主要包括4个部分:词法分析器、语法分析器、语义分析器和对树的操作接口。结构体分析单元其主要功能是读入并分析消息结构定义源文件,并在内存中构造树结构。语法分析器按照消息结构体定义源信息所定义的语法规则,主要是消息结构体语法规则,进行语法分析,在内存中生成消息结构体的树结构。词法分析器按照消息结构体定义源信息所定义的词法规则,进行词法分析,其分析结果用于语法分析器的输入。语义分析器按照消息结构体定义源信息中所遵循的语义,对语法分析器生成的树节点作语义检测、分析和记录。
消息结构定义源和树分别作为消息结构体分析单元的输入和输出,如图1示。其中,消息结构定义源信息可以是一个消息数据结构定义文件、键盘输入、其他模块的输入等,只要输入的消息源能够满足同一种语法规则和语义规则即可。所述语法规则用于定义消息定义源语法组织规则,通过该规则组成消息结构体。所述语义定义主要用来定义消息的层次结构和该消息中各个字段的相关性,比如消息头、消息体、字段长度计算等。
树作为消息结构体分析单元的输出,也是其他单元模块的输入。该树是本发明中消息在内存中表示主要结构关系,如图2所示,该树为多叉树结构。
如图3,本发明中消息结构分析单元的具体的工作流程为:
1)启动语法分析器;
2)语法分析器驱动词法分析器读入消息结构体定义源信息的一个词和其属性,并输入到语法分析器中;如果,读入的词为空,则读消息结构体定义源信息到结束位置,跳转到本工作流程第8)步;
3)语法分析器按照至顶向下的分析方法,作语法匹配,并规约;
4)如果匹配的语法为一个结构体声明开始位置,则创建树根节点,记录下结构体声明属性,包括:消息名,对齐方式等信息,并把该节点作为一个子节点插入到其上层树中,如果上层树还没有建立,则该节点作为“消息根节点”;设置该根节点为“当前根节点”(如果是消息的开始声明位置,该根节点也是整个“消息根节点”),之后,跳转到第2)步继续执行;
5)如果匹配的语法为一个结构体声明的结束位置,则把“当前根节点”的父节点设置为“当前根节点”;之后,跳转到2)步继续执行;
6)如果匹配的语法为结构体的一个域,则创建一个树节点并把该域的所有信息记录到该树节点中,包括:域名,类型,长度等,之后把该节点作为一个子节点插入到“当前根节点”中;
7)如果匹配的语法中包括了一个语义规则,那么在该位置对应的树节点上记录下该语义规则;之后,跳转到2)步骤继续执行;
8)输出上述7个步骤所形成的树,结束本工作流程。
附图4示出了本发明提供的基于树的消息编码模块处理的工作流程图。该流程完成的主要功能是把域值从内存树中按后序遍历方法取出,作字节流顺序转换,并按照该消息所定义的对齐方式,放入到一指定内存块中,该内存块通常用于发送缓冲区、或存储缓冲区等。该工作流程的输入为一棵树,输出为一连续的内存块。
所述对齐方式是指:消息中每个域值在内存中存放的位置按照一定约束位置存放。在一般的处理消息的程序设计中,对齐方式可以由编译器辅助完成。由于在本发明中,测试工具生成后,不再需要编译器参与。所以,在该流程中,加入了加入对齐方式处理。
所述后序遍历方法是指:设定一棵树是倒置树,从该树的最左边最深层次的子树遍历,先遍历该子树的叶子节点再遍历其根节点。采用递归遍历的方法,把整个树节点全部遍历。
所述字节流顺序转换是指:在不同体系结构系统中,在处理多字节类型的时候有差异,为了能保证该类系统之间的通讯正常,而制定的一种统一的字节流顺序作为传输顺序。
该工作流程具体包含以下步骤:
1)从所述内存中树的根节点中读入该消息的对齐方式;
2)采用后序遍历方式从树中读入第一个节点;
3)判断该节点是否为叶子节点,如果该节点是叶子节点,则执行第4步,如果不是叶子节点,则跳转到第10)步;
4)从该叶子节点中读入域名、域值、类型、语义规则和其他属性;
5)计算该域值,并判断该域与其他域的语义相关性;如果该值已经“明确”定义,直接使用该值即可;如果域值与其它域的类型有相关性,从树中读取相关的域类型,根据规则,计算该域值;
6)根据该系统的设计需要,把该域值作字节流顺序转换;系统根据需要,可以对域值进行字节流顺序转换,如用于不同数据存储方式系统之间的消息传输;
7)按照对齐方式调整写指针,该指针是指向输出内存块的指针;
8)通过写指针,把域值写入的内存块中;
9)从树中读入下一个节点;
10)如果该节点为叶子节点,跳转到3);如果该节点为整棵树的根节点,输出该内存块,本工作流程结束;其他情况跳转到9)。
附图5示出了本发明提供的基于树的消息解码单元处理的工作流程图。该工作流程完成的主要功能是:按照给定的对齐方式,把消息值所在的内存数据块依次读入到内存中的树结构上(该内存数据块可以是接收缓冲区,或者读入存储缓冲区等),并可以根据该域的属性根据需要作对应的字节流顺序转换。该工作流程的输入为一内存块,输出为一棵树,该树所有节点均被赋值和属性。
在该工作流程中涉及到消息声明和消息实例。消息声明是指记录了消息中域关系,但不包括域值的对象。消息实例是指记录了域的关系和值的对象。
该工作流程具体包括以下工作步骤:
1)读入消息声明,构造该消息的内存树;
2)读入该消息的对齐方式;
3)按照后序遍历方法,从该内存树上取出第一个叶子节点,设置为当前叶子节点;
4)判断当前叶子节点是否为树的根节点,同时判断该内存块的读指针是为内存块的结束位置,如果满足其一条件,则解码过程结束;若都不是,输出为内存中的树;
5)根据步骤2)所记录的对齐方式,调整读指针;
6)从读指针开始位置,读入一定长度的数据;该长度的可以根据当前叶子节点中所记录的属性计算而得;同时移动读指针;
7)根据当前叶子节点所记录该域的属性,判断所述数据是否需要字节流顺序转换,如果需要,把读入的所述数据作字节流顺序转换;
8)把所述数据赋值到当前叶子节点中;
9)在树中,从该叶子节点位置,按后序遍历,读下一个叶子节点,并设置为当前叶子节点;之后,跳转到第4)步。
图6示出了本发明提供的域值操作单元处理的工作流程图。该工作流程完成的主要功能是:读取或设置消息中给定位置的域值。该工作流程的输入为所需要操作的域位置描述,输出为该域所在叶子节点。
该工作流程具体工作流程为:
1)从输入域位置信息中取出第一个域名,该域名为消息名;
2)从保存消息树的链表中找到该域名的消息树,并设置该树的根节点为当前节点;
3)从输入域位置信息中取出下一个域名;
4)从当前节点的所有子节点中,按照从左到右的顺序,查找与该域名相匹配的节点,找到后,设置该节点为当前节点;
5)判断是否读入到输入域位置信息中的最后位置;如果是最后位置,当前节点就是输入所指定操作的域,返回该叶子节点,结束;否则,跳转到第3)步。
总之,本发明消息处理系统通过以上描述的工作流程,在基于消息的测试工具中,可以提供一种通用的消息的处理能力,可以具有对新消息的扩展能力。
尽管参照实施例对所公开的涉及消息处理系统及其处理方法进行了特别描述,本领域技术人员将能理解,在不偏离本发明的范围和精神的情况下,可以对它进行形式和细节的种种显而易见的修改。因此,以上描述的实施例是说明性的而不是限制性的,在不脱离本发明的精神和范围的情况下,所有的变化和修改都在本发明的范围之内。
Claims (13)
1、一种消息处理系统,其特征在于,包括消息结构分析单元,消息编码单元,消息解码单元和域值操作单元,其中:
消息结构分析单元用于读取消息结构体定义源信息,在内存中构造树的结构;
消息编码单元用于把域值从所述内存中的树中按后序遍历方法取出,并按照消息所定义的对齐方式,放入到一指定内存数据块;
消息解码单元用于按照定义的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上;
域值操作单元用于读取或设置消息中给定位置的域值。
2、根据权利要求1所述的系统,其特征在于:
所述消息编码单元还用于将所述取出的域值作字节流顺序转换;
所述消息解码单元还用于将内存数据块的消息作字节流顺序转换。
3、根据权利要求1或2所述的系统,其特征在于:
所述消息结构分析单元还包括词法分析器、语法分析器、语义分析器,其中:
语法分析器按照消息结构体定义源信息所定义的语法规则,进行语法分析,在内存中生成消息结构体的树结构;
词法分析器按照消息结构体定义源信息所定义的词法规则,进行词法分析,其分析结果用于输入到语法分析器;
语义分析器按照消息结构体定义源信息中所遵循的语义,对语法分析器生成的树节点作语义检测、分析和记录。
4、根据权利要求3所述的系统,其特征在于:
所述消息结构分析单元执行以下动作:
1)启动语法分析器;
2)语法分析器驱动词法分析器读入消息结构体定义源信息的一个词和其属性,并输入到语法分析器中;如果,读入的词为空,则读消息结构体定义源信息到结束位置,跳转到本工作流程第8)步;
3)语法分析器按照至顶向下的分析方法,作语法匹配,并规约;
4)如果匹配的语法为一个结构体声明开始位置,则创建树根节点,记录下结构体声明属性,包括:消息名、对齐方式,并把该树根节点作为一个子节点插入到其上层树中,如果上层树还没有建立,则该树根节点作为“消息根节点”,设置该树根节点为“当前根节点”;如果是消息的开始声明位置,该树根节点也是整个“消息根节点”;之后,跳转到第2)步继续执行;
5)如果匹配的语法为一个结构体声明的结束位置,则把“当前根节点”的父节点设置为“当前根节点”;之后,跳转到第2)步继续执行;
6)如果匹配的语法为结构体的一个域,则创建一个树节点并把该域的所有信息记录到该树节点中,包括:域名、类型、长度,之后把该树节点作为一个子节点插入到“当前根节点”中;
7)如果匹配的语法中包括了一个语义规则,那么在该语义规则对应的树节点上记录下该语义规则;之后,跳转到第2)步继续执行;
8)输出上述7个步骤所形成的树。
5、根据权利要求1或2所述的系统,其特征在于:
所述消息编码单元执行以下动作:
1)从内存中树的根节点中读入该消息的对齐方式;
2)采用后序遍历方式从树中读入第一个节点;
3)判断该节点是否为叶子节点,如果该节点是叶子节点,则执行第4)步;如果不是叶子节点,则跳转到第10)步;
4)从该叶子节点中读入域名、域值、类型、语义规则和其他属性;
5)计算该域值:判断该域值与其他域的语义相关性,如果该域值已经定义,直接使用该域值即可;如果该域值与其它域的类型有相关性,从树中读取相关的域类型,根据规则,计算该域值;
6)根据该系统的设计需要,把该域值作字节流顺序转换;系统根据需要,对域值进行字节流顺序转换,用于具有不同数据存储方式的系统之间的消息传输;
7)按照所述对齐方式调整写指针,该写指针是指向输出内存块的指针;
8)通过写指针,把域值写入内存块中;
9)从树中读入下一个节点;
10)如果该节点为叶子节点,跳转到第3)步;如果该节点为整棵树的根节点,输出该内存块,本工作流程结束;其他情况跳转到第9)步。
6、根据权利要求1或2所述的系统,其特征在于:
所述消息解码单元执行以下动作:
1)读入消息声明,构造该消息的内存树;
2)读入该消息的对齐方式;
3)按照后序遍历方法,从该内存树上取出第一个叶子节点,设置为当前叶子节点;
4)判断当前叶子节点是否为树的根节点,同时判断该内存数据块的读指针是否为内存数据块的结束位置,如果满足其一条件,则解码过程结束;若都不是,输出为内存中的树;
5)据步骤2)所记录的对齐方式,调整读指针;
6)从读指针开始位置,读入一定长度的数据;该长度根据当前叶子节点中所记录的属性计算而得;同时移动读指针;
7)根据当前叶子节点所记录域的属性,判断所述数据是否需要字节流顺序转换,如果需要,把读入的所述数据作字节流顺序转换;
8)把所述数据赋值到当前叶子节点中;
在树中,从该叶子节点位置,按后序遍历,读下一个叶子节点,并设置为当前叶子节点;之后,跳转到第4)步。
7、根据权利要求1或2所述的系统,其特征在于:
所述域值操作单元执行以下动作:
1)从输入域位置信息中取出第一个域名,该域名为消息名;
2)从保存消息树的链表中找到该域名的消息树,并设置该消息树的根节点为当前节点;
3)从输入域位置信息中取出下一个域名;
4)从当前节点的所有子节点中,按照从左到右的顺序,查找与该域名相匹配的节点,找到后,设置该节点为当前节点;
5)判断是否读入到输入域位置信息中的最后位置;如果是最后位置,当前节点就是输入所指定操作的域,返回叶子节点,结束;否则,跳转到第3)步。
8、一种消息处理方法,其特征在于包括以下步骤:
1)输入消息结构体定义源信息,在内存中构造树的结构;
2)把域值从所述内存中的树中按后序遍历方法取出,并按照消息所定义的对齐方式,放入到一指定内存数据块;
3)按照定义的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上。
9、根据权利要求8所述的消息处理方法,其特征在于:
所述把域值从所述内存中的树中按后序遍历方法取出,并按照消息所定义的对齐方式,放入到一指定内存数据块的步骤中还包括将所述取出的域值作字节流顺序转换的步骤;
所述按照定义的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上的步骤中还包括将内存数据块的消息作字节流顺序转换的步骤。
10、根据权利要求8所述的消息处理方法,其特征在于,还包括以下步骤:
1)从输入域位置信息中取出第一个域名,该域名为消息名;
2)从保存消息树的链表中找到该域名的消息树,并设置该消息树的根节点为当前节点;
3)从输入域位置信息中取出下一个域名;
4)从当前节点的所有子节点中,按照从左到右的顺序,查找与该域名相匹配的节点,找到后,设置该节点为当前节点;
5)判断是否读入到输入域位置信息中的最后位置;如果是最后位置,当前节点就是输入所指定操作的域,返回叶子节点,结束;否则,跳转到第3)步。
11、根据权利要求8、9或10所述的消息处理方法,其特征在于:
所述输入消息结构体定义源信息,在内存中构造树的结构的步骤中还包括以下步骤:
1)启动语法分析器;
2)语法分析器驱动词法分析器读入消息结构体定义源信息的一个词和其属性,并输入到语法分析器中;如果,读入的词为空,则读消息结构体定义源信息到结束位置,跳转到本工作流程第8)步;
3)语法分析器按照至顶向下的分析方法,作语法匹配,并规约;
4)如果匹配的语法为一个结构体声明开始位置,则创建树根节点,记录下结构体声明属性,包括:消息名、对齐方式,并把该树根节点作为一个子节点插入到其上层树中,如果上层树还没有建立,则该树根节点作为“消息根节点”,设置该树根节点为“当前根节点”;如果是消息的开始声明位置,该树根节点也是整个“消息根节点”;之后,跳转到第2)步继续执行;
5)如果匹配的语法为一个结构体声明的结束位置,则把“当前根节点”的父节点设置为“当前根节点”;之后,跳转到第2)步继续执行;
6)如果匹配的语法为结构体的一个域,则创建一个树节点并把该域的所有信息记录到该树节点中,包括:域名、类型、长度,之后把该树节点作为一个子节点插入到“当前根节点”中;
7)如果匹配的语法中包括了一个语义规则,那么在该语义规则对应的树节点上记录下该语义规则;之后,跳转到第2)步继续执行;
8)输出上述7个步骤所形成的树,结束本工作流程。
12、根据权利要求8、9或10所述的消息处理方法,其特征在于:
所述把域值从所述内存中的树中按后序遍历方法取出,并按照该消息所定义的对齐方式,放入到一指定内存数据块的步骤中还包括以下步骤:
1)从所述内存中树的根节点中读入消息的对齐方式;
2)采用后序遍历方式从树中读入第一个节点;
3)判断该节点是否为叶子节点,如果该节点是叶子节点,则执行第4)步;如果不是叶子节点,则跳转到第10)步;
4)从该叶子节点中读入域名、域值、类型、语义规则和其他属性;
5)计算该域值:判断该域值与其他域的语义相关性;如果该域值已经定义,直接使用该域值即可;如果该域值与其它域的类型有相关性,从树中读取相关的域类型,根据规则,计算该域值;
6)根据系统的设计需要,把该域值作字节流顺序转换;系统根据需要,对域值进行字节流顺序转换,用于具有不同数据存储方式的系统之间的消息传输;
7)按照所述对齐方式调整写指针,该写指针是指向输出内存块的指针;
8)通过写指针,把域值写入内存块中;
9)从树中读入下一个节点;
10)如果该节点为叶子节点,跳转到第3)步;如果该节点为整棵树的根节点,输出该内存块,本工作流程结束;其他情况跳转到第9)步。
13、根据权利要求8、9或10所述的消息处理方法,其特征在于:
所述按照定义的对齐方式,把消息从所述内存数据块中依次读出,并写入到内存中的树结构上的步骤中还包括以下步骤:
1)读入消息声明,构造该消息的内存树;
2)读入该消息的对齐方式;
3)按照后序遍历方法,从该内存树上取出第一个叶子节点,设置为当前叶子节点;
4)判断当前叶子节点是否为树的根节点,同时判断该内存数据块的读指针是否为内存数据块的结束位置,如果满足其一条件,则解码过程结束;若都不是,输出为内存中的树;
5)根据步骤2)所记录的对齐方式,调整读指针;
6)从读指针开始位置,读入一定长度的数据;该长度根据当前叶子节点中所记录的属性计算而得;同时移动读指针;
7)根据当前叶子节点所记录域的属性,判断所述数据是否需要字节流顺序转换,如果需要,把读入的所述数据作字节流顺序转换;
8)把所述数据赋值到当前叶子节点中;
在树中,从该叶子节点位置,按后序遍历,读下一个叶子节点,并设置为当前叶子节点;之后,跳转到第4)步。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100652618A CN100562008C (zh) | 2004-10-31 | 2004-10-31 | 消息处理系统及其处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100652618A CN100562008C (zh) | 2004-10-31 | 2004-10-31 | 消息处理系统及其处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1767524A CN1767524A (zh) | 2006-05-03 |
CN100562008C true CN100562008C (zh) | 2009-11-18 |
Family
ID=36743131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100652618A Active CN100562008C (zh) | 2004-10-31 | 2004-10-31 | 消息处理系统及其处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100562008C (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102394874B (zh) * | 2011-10-26 | 2014-04-16 | 深圳天源迪科信息技术股份有限公司 | Tuxedo数据协议转换方法 |
CN103209100B (zh) * | 2012-01-12 | 2015-12-16 | 百度在线网络技术(北京)有限公司 | 服务监控方法及系统 |
CN102624736B (zh) * | 2012-03-20 | 2014-11-12 | 瑞斯康达科技发展股份有限公司 | 一种tl1命令校验方法及装置 |
CN103001971B (zh) * | 2012-12-25 | 2015-08-12 | 成都科来软件有限公司 | 一种网络数据包解析方法 |
CN105912470B (zh) * | 2016-04-11 | 2018-09-07 | 北京简约纳电子有限公司 | 适用于asn.1的测试用例生成方法 |
-
2004
- 2004-10-31 CN CNB2004100652618A patent/CN100562008C/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN1767524A (zh) | 2006-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108885632B (zh) | 用于实时数据流编程的高效状态机 | |
CN106709356B (zh) | 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法 | |
CN103164249B (zh) | 用于脚本语言编译器的扩展机制 | |
CN102819492B (zh) | 一种基于Android的关键字驱动自动化测试框架 | |
US7661096B2 (en) | Interaction with nested and non-nested streams | |
CN110376959B (zh) | 一种基于fpga平台的软plc组态软件生成系统 | |
JP5123291B2 (ja) | プログラミング言語における式ツリーの深い埋め込みのためのジェネリックインターフェイス | |
CN108628635A (zh) | 获取参数名和局部变量名的方法、装置、设备及存储介质 | |
CN109739494B (zh) | 一种基于Tree-LSTM的API使用代码生成式推荐方法 | |
WO2004036340A2 (en) | A method, a language and a system for the definition and implementation of software solutions | |
CN109542450B (zh) | 智能变电站过程层智能组件实现方法及装置 | |
CN107273109B (zh) | 对源代码建模的方法和系统以及使用数据模型的方法 | |
Hamou-Lhadj et al. | A metamodel for the compact but lossless exchange of execution traces | |
CN101561671B (zh) | 基于构件的梯形图设计方法 | |
CN101202736B (zh) | 一种基于抽象语法标记实现编解码的方法 | |
CN110162297A (zh) | 一种源代码段自然语言描述自动生成方法及系统 | |
CN109857458B (zh) | 基于ANTLR的AltaRica 3.0的扁平化的转化方法 | |
CN100562008C (zh) | 消息处理系统及其处理方法 | |
CN101201750B (zh) | 利用语法词法分析工具为编解码提供数据的方法 | |
CN105573763A (zh) | 一种支持rtos的嵌入式系统建模方法 | |
CN1932766A (zh) | 面向串行程序代码量大的领域的半自动并行化方法 | |
CN112199075B (zh) | 一种基于微服务智能信息处理方法及框架系统 | |
CN116560667B (zh) | 一种基于预编译延迟执行的拆分调度系统及方法 | |
US20230266948A1 (en) | Method for extracting the structure of an input for a binary program | |
Sarikaya et al. | Estelle-based test generation tool |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |