CN108984728B - 一种代理类生成方法及装置 - Google Patents
一种代理类生成方法及装置 Download PDFInfo
- Publication number
- CN108984728B CN108984728B CN201810760135.6A CN201810760135A CN108984728B CN 108984728 B CN108984728 B CN 108984728B CN 201810760135 A CN201810760135 A CN 201810760135A CN 108984728 B CN108984728 B CN 108984728B
- Authority
- CN
- China
- Prior art keywords
- target
- message
- field
- file
- parameters
- 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
Abstract
本发明提供了一种代理类生成方法及装置,属于计算机技术领域。其中,终端可以先获取目标协议缓存PB文件,然后确定目标PB文件中每个目标消息的关联消息,接着,获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数,最后,基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成目标PB文件对应的代理类。本发明实施例中,终端可以自主生成目标PB文件的代理类,进而可以省略用户手动编写代理类的操作,简化了操作过程,降低了实现成本。
Description
技术领域
本发明属于计算机技术领域,特别是涉及一种代理类生成方法及装置。
背景技术
谷歌协议缓存(Google Protocol Bufffer PB)是一种结构化数据存储格式,由于其具有轻便高效的优点,很多应用的数据都会采用PB结构,而为了快速启动应用,通常需要将应用的数据加载至共享内存中。但是,由于在共享内存时,终端会指定一个共享内存区用于加载数据,而PB结构数据的特性会使得终端在加载PB结构数据时,主动去申请一个地址进行存储,即,无法将PB结构数据加载至共享内存区中,导致PB结构数据不支持共享内存,使得好多应用无法进行内存共享,启动速度较慢。
现有技术中,通常是是针对PB结构数据的内容,手工编写支持共享内存的代理类,以使得这些PB结构的数据能够被加载至共享内存中。但是,手工编写的方式操作较为繁琐,实现成本较高。
发明内容
本发明提供一种代理类生成方法及装置,以便解决手工编写代理类,操作较为繁琐,实现成本较高的问题。
依据本发明的第一方面,提供了一种代理类生成方法,应用于终端,该方法可以包括:获取目标协议缓存PB文件;所述目标PB文件中包括至少一个目标消息;
确定每个目标消息的关联消息;
获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数;
基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类;
其中,所述目标字段的参数至少包括目标字段的类型及内容,所述关联字段的参数至少包括所述关联字段的类型及内容,所述预设的模板代码中定义有支持共享内存的字段。
可选的,所述获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数的步骤,包括:
对于每个目标消息,利用预设语言转换工具,将所述目标消息转换为预设语言格式的消息,得到可读取目标消息;
对于每个关联消息,利用所述预设语言转换工具,将所述关联消息转换为预设语言格式的消息,得到可读取关联消息;
从每个可读取目标消息中读取每个目标字段的参数,从每个可读取关联消息中读取每个关联字段的参数。
可选的,所述确定每个目标消息的关联消息的步骤,包括:
对于每个目标消息,判断所述目标消息中是否定义有消息对象;
若所述目标消息中定义有消息对象,则判断所述消息对象对应的消息是否在所述目标PB文件中;
若所述消息对象对应的消息不在所述目标PB文件中,则将所述消息对象对应的消息,确定为所述目标消息的关联消息。
可选的,所述预设的模板代码包括多个子代码段,所述支持共享内存的字段定义在每个子代码段中;
所述基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类的步骤,包括:
对于每个目标字段,将所述目标字段的参数拷贝至所述目标字段的类型对应的子代码段,以及,对于每个关联字段,将所述关联字段的参数拷贝至所述关联字段的类型对应的子代码段,得到所述目标PB文件对应的代理类。
可选的,所述对于每个目标字段,将所述目标字段的参数拷贝至所述目标字段的类型对应的子代码段的步骤,包括:
在所述目标字段设置有预设标识时,将所述目标字段对应的指针拷贝至所述目标字段的类型对应的子代码段。
可选的,在所述基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类的步骤之后,所述方法还包括:
接收用户发送的数据获取请求;所述数据获取请求中包括待获取字段;
若所述目标PB文件对应的代理类中存储有所述待获取字段的参数,则通过所述代理类向用户返回存储的所述待获取字段的参数;
若所述目标PB文件对应的代理类中存储有所述待获取字段对应的指针,则通过所述代理类从所述目标PB文件中获取所述待获取字段的参数,并返回给用户。
可选的,所述终端中预先设置有代理类存储路径;
在所述基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类的步骤之后,所述方法还包括:
将所述目标PB文件对应的代理类存储至所述代理类存储路径下;
在将所述目标PB文件加载至共享内存时,以所述代理类存储路径作为目标加载路径进行加载。
依据本发明的第二方面,提供了一种代理类生成装置,应用于终端,该装置可以包括:
第一获取模块,用于获取目标协议缓存PB文件;所述目标PB文件中包括至少一个目标消息;
确定模块,用于确定每个目标消息的关联消息;
第二获取模块,用于获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数;
生成模块,用于基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类;
其中,所述目标字段的参数至少包括目标字段的类型及内容,所述关联字段的参数至少包括所述关联字段的类型及内容,所述预设的模板代码中定义有支持共享内存的字段。
可选的,所述第二获取模块,用于:
对于每个目标消息,利用预设语言转换工具,将所述目标消息转换为预设语言格式的消息,得到可读取目标消息;
对于每个关联消息,利用所述预设语言转换工具,将所述关联消息转换为预设语言格式的消息,得到可读取关联消息;
从每个可读取目标消息中读取每个目标字段的参数,从每个可读取关联消息中读取每个关联字段的参数。
可选的,所述确定模块,用于:
对于每个目标消息,判断所述目标消息中是否定义有消息对象;
若所述目标消息中定义有消息对象,则判断所述消息对象对应的消息是否在所述目标PB文件中;
若所述消息对象对应的消息不在所述目标PB文件中,则将所述消息对象对应的消息,确定为所述目标消息的关联消息。
可选的,所述预设的模板代码包括多个子代码段,所述支持共享内存的字段定义在每个子代码段中;
所述生成模块,包括:
拷贝子模块,用于对于每个目标字段,将所述目标字段的参数拷贝至所述目标字段的类型对应的子代码段,以及,对于每个关联字段,将所述关联字段的参数拷贝至所述关联字段的类型对应的子代码段,得到所述目标PB 文件对应的代理类。
可选的,所述拷贝子模块,用于:
在所述目标字段设置有预设标识时,将所述目标字段对应的指针拷贝至所述目标字段的类型对应的子代码段。
可选的,所述装置还包括:
接收模块,用于接收用户发送的数据获取请求;所述数据获取请求中包括待获取字段;
第一返回模块,用于若所述目标PB文件对应的代理类中存储有所述待获取字段的参数,则通过所述代理类向用户返回存储的所述待获取字段的参数;
第二返回模块,用于若所述目标PB文件对应的代理类中存储有所述待获取字段对应的指针,则通过所述代理类从所述目标PB文件中获取所述待获取字段的参数,并返回给用户。
可选的,所述终端中预先设置有代理类存储路径;
所述装置还包括:
存储模块,用于将所述目标PB文件对应的代理类存储至所述代理类存储路径下;
加载模块,用于在将所述目标PB文件加载至共享内存时,以所述代理类存储路径作为目标加载路径进行加载。
依据本发明的第三方面,提供了一种移动终端,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的代理类生成程序,所述代理类生成程序被所述处理器执行时实现如第一方面中所述的代理类生成方法中的步骤。
依据本发明的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有代理类生成程序,所述代理类生成程序被处理器执行时实现如第一方面中所述的代理类生成方法的步骤。
针对在先技术,本发明具备如下优点:
终端可以先获取目标协议缓存PB文件,然后确定目标PB文件中每个目标消息的关联消息,接着,获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数,最后,基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成目标PB文件对应的代理类。本发明实施例中,终端可以自主生成目标PB文件的代理类,进而可以省略用户手动编写代理类的操作,简化了操作过程,降低了实现成本。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明实施例一提供的一种代理类生成方法的步骤流程图;
图2是本发明实施例二提供的另一种代理类生成方法的步骤流程图;
图3是本发明实施例三提供的一种代理类生成装置的框图;
图4是本发明实施例四提供的一种代理类生成装置的框图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
实施例一
图1是本发明实施例一提供的一种代理类生成方法的步骤流程图,该方法可以应用于终端,如图1所示,该方法可以包括:
步骤101、获取目标协议缓存PB文件;所述目标PB文件中包括至少一个目标消息。
实际应用中,一个PB文件可以由消息组成,消息可以由字段组成。其中,消息可以表示结构化数据,PB文件中可以定义有每个消息的消息名,进一步地,一个消息中可以包括多个字段,消息中的字段可以表示结构化数据的类型、内容,等等。进一步地,本发明实施例中,开发人员可以预先定义好目标PB文件的存储路径,终端可以读取该目标PB文件的存储路径下的PB文件,进而得到目标PB文件。
步骤102、确定每个目标消息的关联消息。
实际应用中,目标PB文件有时候需要调用其他消息中的数据,因此,可能会出现目标消息与其他消息连接的现象,即就是,目标消息依赖于另一消息。其中,目标消息依赖的消息即为目标消息的关联消息。进一步地,由于两者存在依赖关系,因此,只有最终生成的代理类中包括关联消息对应的部分,才可以使最终生成的代理类能够正常使用,否则,目标PB文件通过最终生成的代理类被加载至共享内存之后,由于代理类中缺少关联消息的信息,就会导致数据调用失败,进而出现运行错误的问题。因此,为了避免出现错误,本发明实施例中可以先获取目标消息的关联消息。
步骤103、获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数。
本发明实施例中,目标消息中的目标字段可以是目标消息中的每个字段,目标字段的参数至少可以包括目标字段的类型及内容;关联消息中的关联字段可以是关联消息中的每个字段,关联字段的参数至少可以包括关联字段的类型及内容。
步骤104、基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类。
本发明实施例中,目标字段的参数可以至少包括目标字段的类型及内容,关联字段的参数可以至少包括关联字段的类型及内容,该预设的模板代码中可以定义有支持共享内存的字段,进一步地,终端可以将每个目标字段的参数及每个关联字段的参数拷贝至预设的模板代码的对应位置,进而得到目标PB文件对应的代理类。本发明实施例中,由于预设的模板代码中定义有支持共享内存的字段,因此,终端可以对基于预设模板代码生成的代理类进行共享内存,进一步地,由于目标PB文件对应的代理类中包含有目标PB 文件中目标字段的参数以及相关联的关联字段的参数,因此,终端可以通过对目标PB文件对应的代理类进行内存共享,达到对目标PB文件进行内存共享的效果。
综上所述,本发明实施例一提供的代理类生成方法,终端可以先获取目标协议缓存PB文件,然后确定目标PB文件中每个目标消息的关联消息,接着,获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数,最后,基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成目标PB文件对应的代理类。本发明实施例中,终端可以自主生成目标PB文件的代理类,进而可以省略用户手动编写代理类的操作,简化了操作过程,降低了实现成本。
实施例二
图2是本发明实施例二提供的另一种代理类生成方法的步骤流程图,该方法可以应用于终端,如图2所示,该方法可以包括:
步骤201、获取目标协议缓存PB文件;所述目标PB文件中包括至少一个目标消息。
具体的,本步骤的实现方式可以参考上述步骤101,本发明实施例对此不作限定。
步骤202、确定每个目标消息的关联消息。
具体的,终端可以通过下述子步骤(1)~子步骤(3)实现确定每个目标消息的关联消息:
子步骤(1):对于每个目标消息,判断所述目标消息中是否定义有消息对象。
实际应用中,当一个消息依赖于另一个消息时,该消息中往往会定义有其所依赖的消息对应的消息对象,示例的,假设消息A依赖于消息B,那么消息A中会有消息B对应的消息对象。其中,消息对应的消息对象可以是通过该消息的全路径定义的,假设消息B的全路径为root.sub_path2,那么消息A中包括的消息B对应的消息对象可以为root.sub_path2::B。因此,本步骤中,终端可以先判断目标消息中是否定义有消息对象,具体的,终端可以遍历目标消息中每个字段,来确定是否存在有表示消息对象的字段,其中,表示消息对象的字段可以为格式符合全路径格式的字段,如果有,则可以确定该目标消息中定义有消息对象,反之,则可以确定该目标消息中没有定义消息对象。
子步骤(2):若所述目标消息中定义有消息对象,则判断所述消息对象对应的消息是否在所述目标PB文件中。
本步骤中,该目标消息依赖的消息可能是目标PB文件中的另一个目标消息,即,两者在同一PB文件中,由于最终生成的代理类中,会包括每个目标消息对应的部分,这样,当目标消息与其依赖的消息处于同一PB文件中,就无需再将该消息确定为关联消息,以避免后续步骤中继续对该目标消息的关联消息进行处理。为了防止在目标消息依赖的消息与目标消息在同一 PB文件的情况下,还继续确定该目标消息依赖的消息为关联消息,进而导致后续操作中执行不必要的操作,浪费系统资源的问题,终端可以在目标消息中定义有消息对象时,判断该消息对象对应的消息是否在目标PB文件中。
具体的,终端可以判断该消息对象所表示的路径是否指向目标PB文件,如果是,则可以确定该消息对象对应的消息在目标PB文件中,如果不是,则可以确定该消息对象对应的消息不在目标PB文件中。
子步骤(3):若所述消息对象对应的消息不在所述目标PB文件中,则将所述消息对象对应的消息,确定为所述目标消息的关联消息。
示例的,假设目标消息中定义有消息对象1,消息对象1对应的消息C 不在目标PB文件中,那么终端可以将消C确定为该目标消息的关联消息。
步骤203、获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数。
本发明实施例中,目标消息中的目标字段可以是目标消息中的每个字段,目标字段的参数至少可以包括目标字段的类型及内容;关联消息中的关联字段可以是关联消息中的每个字段,关联字段的参数至少可以包括关联字段的类型及内容。当然,目标字段的参数还可以包括目标字段的字段名,关联字段的参数还可以包括关联字段的字段名,本发明实施例对此不作限定。
实际应用中,受到PB文件的格式特性的影响,从PB文件中获取参数时的操作会较为复杂。为了方便获取目标消息中的参数及关联消息的参数,提高获取参数的效率,本发明实施例中,对于每个目标消息,终端可以利用预设语言转换工具,将该目标消息转换为预设语言格式的消息,得到可读取目标消息终端;对于每个关联消息,终端可以利用预设语言转换工具,将该关联消息转换为预设语言格式的消息,得到可读取关联消息;最后,从每个可读取目标消息中读取每个目标字段的参数,从每个可读取关联消息中读取每个关联字段的参数。其中,该预设语言转换工具可以为protoc工具,该预设语言格式可以为面向对象的解释型语言python格式,对于python格式的消息可以通过读变量的方式来直接读取字段中的参数。
当然,实际应用中,终端也可以利用其它工具,将目标消息及关联消息转换为其他支持直接读取参数的格式的消息,本发明实施例对此不作限定。需要说明的是,在进行转换时,终端可以先对目标消息进行转换,再对关联消息进行转换,也可以先对关联消息进行转换,再对目标消息进行转换,当然,也可以同时对目标消息及关联消息进行转换,本发明实施例对此不作限定。
步骤204、基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类。
本步骤中,该预设的模板代码可以包括多个子代码段,每个子代码段中可以定义有支持共享内存的字段。例如,预设的模板代码可以采用支持共享内存的boost::interprocess::managed_shared_memory类型的托管内存,可以与 PB一致,支持int32,int64,uint32,uint64,float,double,bool,enum等类型的字段,可以利用支持共享内存的boost::interprocess::basic_string来表示std::string类型字段,可以利用支持共享内存的boost::interprocess::vector 来表示repeated类型字段,等等。
相应地,对于每个目标字段,终端可以将目标字段的参数拷贝至目标字段的类型对应的子代码段,以及,对于每个关联字段,将关联字段的参数拷贝至关联字段的类型对应的子代码段,得到目标PB文件对应的代理类。其中,目标字段的类型对应的子代码段可以为与目标字段的类型相匹配的子代码段,关联字段的类型对应的子代码段可以为与关联字段的类型相匹配的子代码段。示例的,假设包括目标字段1、目标字段2以及关联字段1,那么终端可以将目标字段1的类型和内容拷贝至目标字段1的类型对应的子代码段中,将目标字段2的类型和内容拷贝至目标字段2的类型对应的子代码段中,将关联字段1的类型和内容拷贝至关联字段1的类型对应的子代码段中。进一步地,预设的模板代码的代码段中还可以定义有拷贝构造函数,该拷贝构造函数可以为深拷贝,示例的,该拷贝构造函数的代码示例可以为:
ListStats(const search::common::ListStats&msg);
进一步地,还可以定义有赋值操作符重载函数,示例的,该赋值操作符重载函数的代码示例可以为:
//assign protobuf message toproxy
Inlinesearch::common::proxy::ListStats&operator=(const search::ListStats& from);
相应地,具体在拷贝时,可以利用该拷贝构造函数,或者赋值操作符重载函数进行拷贝。实际应用中,利用拷贝构造函数进行拷贝的方式,会要求用户重新定义对象,而利用操作符重载函数进行拷贝时,可以不重新定义对象,而是利用已有的定义好的对象,本发明实施例中,通过在预设的模板代码中设置两种用于拷贝的函数,能够满足用户在不用需求,不同场景的拷贝,提供的可应用性。
进一步地,实际应用中,可能会存在目标PB文件加载至共享内存之后,目标PB文件中只有部分数据会被使用到的情况,此时,如果直接将每个目标字段的参数拷贝至目标字段的类型对应的子代码段中的方式,就会进行不必要的拷贝,造成系统资源浪费,因此,本发明实施例中,用户可以根据实际需求,预先为不会被使用的字段设置预设标识,相应地,终端在进行拷贝时,可以在目标字段设置有预设标识时,将目标字段对应的指针拷贝至目标字段的类型对应的子代码段。这样,在保证了目标PB文件的完整性的同时,降低了拷贝操作的拷贝量,进而减少了对终端系统资源的耗费。
示例的,PB文件中字段指针的定义和相关方法的代码示例可以为:
相应地,由于代理类中可能包括的是字段的实际的参数,也有可能是字段的指针,因此,后续过程中,当用户通过提供的接口函数向代理类请求调用某个字段时,终端可以通过下述子步骤(4)~子步骤(6)来处理:
子步骤(4):接收用户发送的数据获取请求。
本步骤中,该数据获取请求中可以包括待获取字段的标识,其中,该标识可以为待获取字段的名称,等等。当用户想要获取某个字段时,可以向终端发送该数据获取请求。
子步骤(5):若所述目标PB文件对应的代理类中存储有所述待获取字段的参数,则通过所述代理类向用户返回存储的所述待获取字段的参数。
子步骤(6):若所述目标PB文件对应的代理类中存储有所述待获取字段对应的指针,则通过所述代理类从所述目标PB文件中获取所述待获取字段的参数,并返回给用户。
示例的,终端可以通过下述代码示例,实现子步骤(5)及子步骤(6) 中的内容:
进一步地,在本发明的另一可选实施例中,预设的模板代码中还可以提供针对PB文件中字段的操作方法函数,例如,has、clear_has及set_has函数,以及针对PB文件中字段的访问方法函数,以便于目标PB文件对应的代理类能够进行简单的数据处理操作,本发明实施例对此不作限定。示例的,提供的has、clear_has及set_has函数的代码示例可以为:
//method for has field long_click_user_count
Inline bool has_long_click_user_count()const;
Inline void set_has_long_click_user_count();
Inline void clear_has_long_click_user_count();
提供的访问方法函数的代码示例可以为:
//method for has field long_click_user_count
Inline void clear_impression_user_count();
Inline int32impression_user_count()const;
Inline void set_impression_user_count(int32value);
Inline copy_impression_user_count(search::common::ListStats&to)const;
步骤205、将所述目标PB文件对应的代理类存储至所述代理类存储路径下。
本步骤中,开发人员可以预先在终端中设置代理类存储路径,该代理类存储路径与目标PB文件的存储路径不同,具体的,终端可以通过在目标PB 文件的存储路径中插入“proxy”字段生成代理类存储路径,例如,目标PB 文件的存储路径为package::CustomMessage,那么代理类的存储路径可以为: package::proxy::CustomMessage。相应地,终端在生成目标PB文件对应的代理类之后,可以将该代理类存储至该预设的代理类存储路径下,以便于后续步骤中通过该路径对代理类进行加载。需要说明的是,在存储时,终端可以基于目标PB文件的文件名来命名该代理类的文件名,示例的,可以设置代理类的文件名与目标PB文件的文件名相同,以尽可能减少对原代码的改动。
步骤206、在将所述目标PB文件加载至共享内存时,以所述代理类存储路径作为目标加载路径进行加载。
本步骤中,终端可以预先将代理类存储路径设置为将目标PB文件加载至共享内存时使用的加载路径,这样,终端在需要将目标PB文件加载至共享内存时,可以以代理类存储路径作为目标加载路径进行加载,进而通过代理类达到将目标PB文件加载至共享内存的效果。
需要说明的是,实际应用中可能会根据实际需求对目标PB文件进行修改,例如,在目标PB文件中新增消息,或者对目标PB文件中原有的消息进行更改,例如,在原有的消息中新增字段,或者更改字段内容,等等。相应地,为了保证目标PB文件的内容与其对应的代理类中的内容保持一致,进而保证终端能够基于目标PB文件对应的代理类达到对目标PB文件进行内存共享的效果,本发明实施例中可以在对目标PB文件进行修改之后,基于该修改后的目标PB文件重新生成代理类,同时,可以删除之前所生成的代理类,以节省移动终端的存储空间。
综上所述,本发明实施例二提供的代理类生成方法,终端可以先获取目标协议缓存PB文件,然后确定目标PB文件中每个目标消息的关联消息,接着,获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数,基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成目标PB文件对应的代理类,这样,通过终端自主生成目标PB文件的代理类,进而省略了用户手动编写代理类的操作,简化了操作过程,降低了实现成本,进一步地,终端可以将目标PB文件对应的代理类存储至预设的代理类存储路径下,并在将目标PB文件加载至共享内存时,以代理类存储路径作为目标加载路径进行加载。这样,可以保证在需要将目标PB文件加载至共享内存时,能够将目标PB文件对应的代理类加载至共享内存中,进而通过目标PB文件对应的代理类,实现目标PB文件被加载至共享内存的效果。
实施例三
图3是本发明实施例三提供的一种代理类生成装置的框图,如图3所示,该装置30可以包括:
第一获取模块301,用于获取目标协议缓存PB文件;所述目标PB文件中包括至少一个目标消息。
确定模块302,用于确定每个目标消息的关联消息。
第二获取模块303,用于获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数。
生成模块304,用于基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类;
其中,所述目标字段的参数至少包括目标字段的类型及内容,所述关联字段的参数至少包括所述关联字段的类型及内容,所述预设的模板代码中定义有支持共享内存的字段。
综上所述,本发明实施例三提供的代理类生成装置,第一获取模块可以先获取目标协议缓存PB文件,然后确定模块可以确定目标PB文件中每个目标消息的关联消息,接着,第二获取模块可以获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数,最后,生成模块可以基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成目标PB文件对应的代理类。本发明实施例中,终端可以自主生成目标PB文件的代理类,进而可以省略用户手动编写代理类的操作,简化了操作过程,降低了实现成本。
实施例四
图4是本发明实施例四提供的一种代理类生成装置的框图,如图4所示,该装置40可以包括:
第一获取模块401,用于获取目标协议缓存PB文件;所述目标PB文件中包括至少一个目标消息。
确定模块402,用于确定每个目标消息的关联消息。
第二获取模块403,用于获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数。
生成模块404,用于基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类;
其中,所述目标字段的参数至少包括目标字段的类型及内容,所述关联字段的参数至少包括所述关联字段的类型及内容,所述预设的模板代码中定义有支持共享内存的字段。
可选的,所述第二获取模块403,用于。
对于每个目标消息,利用预设语言转换工具,将所述目标消息转换为预设语言格式的消息,得到可读取目标消息;
对于每个关联消息,利用所述预设语言转换工具,将所述关联消息转换为预设语言格式的消息,得到可读取关联消息。
从每个可读取目标消息中读取每个目标字段的参数,从每个可读取关联消息中读取每个关联字段的参数。
可选的,所述确定模块402,用于:
对于每个目标消息,判断所述目标消息中是否定义有消息对象。
若所述目标消息中定义有消息对象,则判断所述消息对象对应的消息是否在所述目标PB文件中。
若所述消息对象对应的消息不在所述目标PB文件中,则将所述消息对象对应的消息,确定为所述目标消息的关联消息。
可选的,所述预设的模板代码包括多个子代码段,所述支持共享内存的字段定义在每个子代码段中。
所述生成模块404,包括:
拷贝子模块,用于对于每个目标字段,将所述目标字段的参数拷贝至所述目标字段的类型对应的子代码段,以及,对于每个关联字段,将所述关联字段的参数拷贝至所述关联字段的类型对应的子代码段,得到所述目标PB 文件对应的代理类。
可选的,所述拷贝子模块,用于:
在所述目标字段设置有预设标识时,将所述目标字段对应的指针拷贝至所述目标字段的类型对应的子代码段。
可选的,所述装置40还包括:
接收模块,用于接收用户发送的数据获取请求;所述数据获取请求中包括待获取字段。
第一返回模块,用于若所述目标PB文件对应的代理类中存储有所述待获取字段的参数,则通过所述代理类向用户返回存储的所述待获取字段的参数。
第二返回模块,用于若所述目标PB文件对应的代理类中存储有所述待获取字段对应的指针,则通过所述代理类从所述目标PB文件中获取所述待获取字段的参数,并返回给用户。
可选的,所述终端中预先设置有代理类存储路径。
所述装置40还包括:
存储模块405,用于将所述目标PB文件对应的代理类存储至所述代理类存储路径下。
加载模块406,用于在将所述目标PB文件加载至共享内存时,以所述代理类存储路径作为目标加载路径进行加载。
综上所述,本发明实施例四提供的代理类生成装置,第一获取模块可以先获取目标协议缓存PB文件,然后确定模块可以确定目标PB文件中每个目标消息的关联消息,接着,第二获取模块可以获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数,生成模块可以基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成目标PB文件对应的代理类,这样,通过终端自主生成目标PB文件的代理类,进而省略了用户手动编写代理类的操作,简化了操作过程,降低了实现成本,进一步地,存储模块可以将目标PB文件对应的代理类存储至预设的代理类存储路径下,加载模块可以在将目标PB文件加载至共享内存时,以代理类存储路径作为目标加载路径进行加载。这样,可以保证在需要将目标PB文件加载至共享内存时,能够将目标PB文件对应的代理类加载至共享内存中,进而通过目标PB文件对应的代理类,实现目标PB文件被加载至共享内存的效果。
对于上述装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
进一步地,根据本发明的一个实施例,提供了一种移动终端,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的代理类生成程序,所述代理类生成程序被所述处理器执行时实现前述实施例的代理类生成方法。
根据本发明的一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有代理类生成程序,所述代理类生成程序被处理器执行时实现前述实施例的代理类生成方法。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域技术人员易于想到的是:上述各个实施例的任意组合应用都是可行的,故上述各个实施例之间的任意组合都是本发明的实施方案,但是由于篇幅限制,本说明书在此就不一一详述了。
在此提供的代理类生成方法不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造具有本发明方案的系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的代理类生成方法中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (12)
1.一种代理类生成方法,其特征在于,应用于终端,所述方法包括:
获取目标协议缓存PB文件;所述目标PB文件中包括至少一个目标消息;
确定每个目标消息的关联消息;
获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数;
基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类;
其中,所述目标字段的参数至少包括目标字段的类型及内容,所述关联字段的参数至少包括所述关联字段的类型及内容,所述预设的模板代码中定义有支持共享内存的字段;
其中,所述确定每个目标消息的关联消息的步骤,包括:
对于每个目标消息,判断所述目标消息中是否定义有消息对象;
若所述目标消息中定义有消息对象,则判断所述消息对象对应的消息是否在所述目标PB文件中;
若所述消息对象对应的消息不在所述目标PB文件中,则将所述消息对象对应的消息,确定为所述目标消息的关联消息。
2.根据权利要求1所述的方法,其特征在于,所述获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数的步骤,包括:
对于每个目标消息,利用预设语言转换工具,将所述目标消息转换为预设语言格式的消息,得到可读取目标消息;
对于每个关联消息,利用所述预设语言转换工具,将所述关联消息转换为预设语言格式的消息,得到可读取关联消息;
从每个可读取目标消息中读取每个目标字段的参数,以及从每个可读取关联消息中读取每个关联字段的参数。
3.根据权利要求1所述的方法,其特征在于,所述预设的模板代码包括多个子代码段,所述支持共享内存的字段定义在每个子代码段中;
所述基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类的步骤,包括:
对于每个目标字段,将所述目标字段的参数拷贝至所述目标字段的类型对应的子代码段,以及,对于每个关联字段,将所述关联字段的参数拷贝至所述关联字段的类型对应的子代码段,得到所述目标PB文件对应的代理类。
4.根据权利要求3所述的方法,其特征在于,所述对于每个目标字段,将所述目标字段的参数拷贝至所述目标字段的类型对应的子代码段的步骤,包括:
在所述目标字段设置有预设标识时,将所述目标字段对应的指针拷贝至所述目标字段的类型对应的子代码段。
5.根据权利要求4所述的方法,其特征在于,在所述基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类的步骤之后,所述方法还包括:
接收用户发送的数据获取请求;所述数据获取请求中包括待获取字段;
若所述目标PB文件对应的代理类中存储有所述待获取字段的参数,则通过所述代理类向用户返回存储的所述待获取字段的参数;
若所述目标PB文件对应的代理类中存储有所述待获取字段对应的指针,则通过所述代理类从所述目标PB文件中获取所述待获取字段的参数,并返回给用户。
6.根据权利要求1所述的方法,其特征在于,所述终端中预先设置有代理类存储路径;
在所述基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类的步骤之后,所述方法还包括:
将所述目标PB文件对应的代理类存储至所述代理类存储路径下;
在将所述目标PB文件加载至共享内存时,以所述代理类存储路径作为目标加载路径进行加载。
7.一种代理类生成装置,其特征在于,应用于终端,所述装置包括:
第一获取模块,用于获取目标协议缓存PB文件;所述目标PB文件中包括至少一个目标消息;
确定模块,用于确定每个目标消息的关联消息;
第二获取模块,用于获取每个目标消息中每个目标字段的参数,以及每个关联消息中每个关联字段的参数;
生成模块,用于基于预设的模板代码、每个目标字段的参数以及每个关联字段的参数,生成所述目标PB文件对应的代理类;
其中,所述目标字段的参数至少包括目标字段的类型及内容,所述关联字段的参数至少包括所述关联字段的类型及内容,所述预设的模板代码中定义有支持共享内存的字段;
其中,所述确定模块,用于:
对于每个目标消息,判断所述目标消息中是否定义有消息对象;
若所述目标消息中定义有消息对象,则判断所述消息对象对应的消息是否在所述目标PB文件中;
若所述消息对象对应的消息不在所述目标PB文件中,则将所述消息对象对应的消息,确定为所述目标消息的关联消息。
8.根据权利要求7所述的装置,其特征在于,所述第二获取模块,用于:
对于每个目标消息,利用预设语言转换工具,将所述目标消息转换为预设语言格式的消息,得到可读取目标消息;
对于每个关联消息,利用所述预设语言转换工具,将所述关联消息转换为预设语言格式的消息,得到可读取关联消息;
从每个可读取目标消息中读取每个目标字段的参数,从每个可读取关联消息中读取每个关联字段的参数。
9.根据权利要求7所述的装置,其特征在于,所述预设的模板代码包括多个子代码段,所述支持共享内存的字段定义在每个子代码段中;
所述生成模块,包括:
拷贝子模块,用于对于每个目标字段,将所述目标字段的参数拷贝至所述目标字段的类型对应的子代码段,以及,对于每个关联字段,将所述关联字段的参数拷贝至所述关联字段的类型对应的子代码段,得到所述目标PB文件对应的代理类。
10.根据权利要求9所述的装置,其特征在于,所述拷贝子模块,用于:
在所述目标字段设置有预设标识时,将所述目标字段对应的指针拷贝至所述目标字段的类型对应的子代码段。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
接收模块,用于接收用户发送的数据获取请求;所述数据获取请求中包括待获取字段;
第一返回模块,用于若所述目标PB文件对应的代理类中存储有所述待获取字段的参数,则通过所述代理类向用户返回存储的所述待获取字段的参数;
第二返回模块,用于若所述目标PB文件对应的代理类中存储有所述待获取字段对应的指针,则通过所述代理类从所述目标PB文件中获取所述待获取字段的参数,并返回给用户。
12.根据权利要求7所述的装置,其特征在于,所述终端中预先设置有代理类存储路径;
所述装置还包括:
存储模块,用于将所述目标PB文件对应的代理类存储至所述代理类存储路径下;
加载模块,用于在将所述目标PB文件加载至共享内存时,以所述代理类存储路径作为目标加载路径进行加载。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810760135.6A CN108984728B (zh) | 2018-07-11 | 2018-07-11 | 一种代理类生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810760135.6A CN108984728B (zh) | 2018-07-11 | 2018-07-11 | 一种代理类生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108984728A CN108984728A (zh) | 2018-12-11 |
CN108984728B true CN108984728B (zh) | 2020-11-27 |
Family
ID=64536986
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810760135.6A Active CN108984728B (zh) | 2018-07-11 | 2018-07-11 | 一种代理类生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108984728B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850531A (zh) * | 2016-11-21 | 2017-06-13 | 中国航天科工集团第四研究院第四总体设计部 | 一种基于模板的协议代码生成方法 |
CN106844643A (zh) * | 2017-01-13 | 2017-06-13 | 王洋 | 一种基于模板引擎的数据库动态生成方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7774789B1 (en) * | 2004-10-28 | 2010-08-10 | Wheeler Thomas T | Creating a proxy object and providing information related to a proxy object |
US8694956B2 (en) * | 2010-10-14 | 2014-04-08 | Red Hat Israel, Ltd. | PowerShell cmdlets code generating tool for communicating to the web services |
CN105302557A (zh) * | 2015-10-30 | 2016-02-03 | 北京奇虎科技有限公司 | 线程建立及处理的方法及装置 |
CN106940714B (zh) * | 2017-03-06 | 2019-07-30 | 掌阅科技股份有限公司 | 一种数据处理方法、装置及电子设备 |
CN107908394B (zh) * | 2017-11-21 | 2020-03-10 | 中国电子科技集团公司第五十四研究所 | 一种数据交换格式化源代码生成方法及装置 |
CN108170426B (zh) * | 2018-01-15 | 2020-06-05 | 浙江大学 | 一种基于本体的RESTful API代码自动生成方法 |
-
2018
- 2018-07-11 CN CN201810760135.6A patent/CN108984728B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850531A (zh) * | 2016-11-21 | 2017-06-13 | 中国航天科工集团第四研究院第四总体设计部 | 一种基于模板的协议代码生成方法 |
CN106844643A (zh) * | 2017-01-13 | 2017-06-13 | 王洋 | 一种基于模板引擎的数据库动态生成方法 |
Non-Patent Citations (2)
Title |
---|
一种Web服务代理自动生成工具;张建华;《中国优秀硕士学位论文全文数据库 信息科技辑(月刊)2009年》;20090715(第7期);I138-458 * |
基于代码自动生成技术的管理信息系统的实现;陈清等;《计算机与数字工程》;20131231(第280期);第268-270、317页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108984728A (zh) | 2018-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109508178B (zh) | 一种程序开发方法及装置 | |
US9563446B2 (en) | Binary file generation | |
US8161471B2 (en) | Utility for optimizing required memory for distribution in embedded systems | |
CN111124550A (zh) | 一种程序动态加载方法、装置及存储介质 | |
CN112765023A (zh) | 测试用例生成方法、装置 | |
CN112395039B (zh) | 一种Kubernetes集群的管理方法和装置 | |
CN111049889B (zh) | 一种静态资源上传方法、装置、集成服务器和系统 | |
US6175935B1 (en) | Software debugging method and recording medium to which debugging program has been recorded | |
US20100058305A1 (en) | Automatic Generation of Language Bindings for Libraries Using Data from Compiler Generated Debug Information | |
US8656120B2 (en) | Device, method and computer-readable medium relocating remote procedure call data in heterogeneous multiprocessor system on chip | |
CN108984728B (zh) | 一种代理类生成方法及装置 | |
CN111309432B (zh) | 一种故障演练方法、装置及系统 | |
CN111538667A (zh) | 一种页面测试的方法及装置 | |
CN114064594B (zh) | 数据处理方法和装置 | |
CN109032572B (zh) | 一种基于字节码的java程序方法内联的方法 | |
CN113805971B (zh) | 一种应用程序运行方法、计算设备及存储介质 | |
TW202403541A (zh) | 第三方行動應用程式中引入小程序的系統、方法、裝置及介質 | |
CN108958795B (zh) | 一种嵌入式系统中BootLoader代码重利用方法和开发板 | |
WO2019157891A1 (zh) | 应用安装方法、应用安装包的生成方法 | |
CN112306539A (zh) | 一种单片机应用层开发方法、系统、终端及介质 | |
CN112068931A (zh) | 一种快速制作虚拟机镜像的方法及系统 | |
CN111796806B (zh) | 生成对象的方法、装置、电子设备及可读存储介质 | |
CN114866451B (zh) | iOS端路由通信改进方法、装置、存储介质和设备 | |
WO2021250898A1 (ja) | 情報処理装置、情報処理方法およびプログラム | |
CN116893862A (zh) | 跨平台实例的交互方法、系统及电子设备 |
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 |