CN113127103B - 一种信令系统及电子设备 - Google Patents

一种信令系统及电子设备 Download PDF

Info

Publication number
CN113127103B
CN113127103B CN201911401132.4A CN201911401132A CN113127103B CN 113127103 B CN113127103 B CN 113127103B CN 201911401132 A CN201911401132 A CN 201911401132A CN 113127103 B CN113127103 B CN 113127103B
Authority
CN
China
Prior art keywords
signaling
interface
component
function
registration
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
Application number
CN201911401132.4A
Other languages
English (en)
Other versions
CN113127103A (zh
Inventor
周志刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201911401132.4A priority Critical patent/CN113127103B/zh
Publication of CN113127103A publication Critical patent/CN113127103A/zh
Application granted granted Critical
Publication of CN113127103B publication Critical patent/CN113127103B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Telephonic Communication Services (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种信令系统,将信令抽象封装成一个框架,系统提供信令基础组件,定义有继承类调用的接口定义以及功能执行接口,功能执行接口中定义有对应的执行方法,执行方法包括参数检测方法和对应的功能实现方法,参数检测方法用于检测执行方法的传入参数是否符合预设格式,功能实现方法按接口定义的方式设定。系统还包括信令管理组件,定义有信令注册接口、获取信令接口、获取信令的日志接口,信令注册接口用于在新信令组件创建时,在信令系统中注册新信令组件,获取信令接口用于获取信令系统中所有的信令组件,信令调用日志接口用于打印信令系统中所有的信令组件。

Description

一种信令系统及电子设备
技术领域
本发明涉及电子技术领域,尤其涉及一种信令系统及电子设备。
背景技术
业务组件化作为移动端应用架构的主流方式之一,近年来一直是业界积极探索和实践的方向。对于一个复杂的系统,通常会设计成多个组件,从而可以将软件系统进行分层和分模块,从而可以协作开发,也易于将功能拆分和更好的独立测试独立更新等。然而组件之间存在一些基于信令的方式来调用功能,由于组件信令的多样性以及复杂性,信令难以统一管理,信令的功能容易出错,难以实现。
发明内容
本发明实施例提供了一种信令系统及电子设备,通过框架的设计方式提供了统一标准的信令系统,便于信令的统一管理以及后续的设计人员设计对应的功能信令。
第一方面,本发明提供了一种信令系统,包括:
信令基础组件,所述信令基础组件定义有继承类调用的接口定义以及功能执行接口,所述功能执行接口中定义有对应的执行方法,所述执行方法包括参数检测方法和对应的功能实现方法,所述参数检测方法用于检测所述执行方法的传入参数是否符合预设格式,所述功能实现方法按所述接口定义的方式设定,所述信令系统中的所有信令均继承所述信令基础组件;
信令管理组件,所述信令管理组件定义有信令注册接口、获取信令接口、获取信令的日志接口,所述信令注册接口用于在新信令组件创建时,在所述信令系统中注册所述新信令组件,所述获取信令接口用于获取所述信令系统中所有的信令组件,所述信令调用日志接口用于打印所述信令系统中所有的信令组件。
可选的,所述信令基础组件中定义有抽象接口,所述抽象接口通过声明一个虚拟go()函数来定义,所述虚拟go()函数等于0,所述功能执行接口继承所述抽象接口,所述功能执行接口中的执行方法编写有对应功能实现逻辑;
所述信令基础组件中通过定义构造函数explicit CSignalBase(const std::string&spec)来限定所述基础组件的传入参数spec为一个字符串类型的参数。
可选的,所述信令管理组件中通过定义static std::map<std::string,maker_fn>mapSignal来以map容器的结构存储所述信令系统中的所有信令,map的键为对应信令的名称,map的值为该信令的功能。
可选的,所述信令注册接口定义为Registration(const std::string&name,maker_fn maker_fn),所述信令注册接口的传入参数为新信令组件的名称以及所述新信令组件的功能,所述信令系统中创建新信令组件时,所述信令注册接口通过检测函数reg.count(name)来检测所述新信令组件是否已注册,所述检测函数reg.count(name)中的name为所述新信令组件的名称,如果所述检测函数reg.count(name)的值小于0,则确定所述新信令组件未在所述信令系统中注册,所述信令注册接口通过注册方法reg.insert(std::make_pair(name,maker_fn)),以map容器的结构保存所述新信令组件,其中,所述新信令组件的名称保存为map的键,所述新信令组件的功能保存为map的值,所述新信令组件对应map的键值相关联。
可选的,所述信令注册接口还用于:
在创建所述新信令组件时,如果所述检测函数reg.count(name)的值大于0,则确定所述新信令组件在所述信令系统中已经注册,通过异常函数throw Error(“registration erro”+name)抛出异常,所述异常包括已注册的信令组件的名称。
可选的,所述信令管理组件还包括信令注册辅助接口,所述信令注册辅助接口继承所述信令注册接口,所述信令注册辅助接口中定义有注册宏REGISTER_SIGNAL(name,Class),所述注册宏中传入参数为新信令组件的名称和对应的功能类,所述注册宏中创建有一个类cmd和类Class组合的名称的辅助类Registration cmd_##Class(name,[]()->CSignalBase*{return new Class;}),所述辅助类通过调用注册接口Registration来完成所述新信令组件整个功能的注册。
可选的,所述信令系统中定义有按预设格式编译的预设功能的信令参数,所述预设格式为信令参数为字符串类型,信令参数名与信令参数值之间以预设字符分割。
可选的,所述信令管理组件设定为单件类。
第二方面,本发明实施例提供了一种电子设备,所述电子设备包括第一方面实施例所述的信令系统及控制器,所述控制器包括存储器和处理器,所述存储器上存储有所述处理器执行所述信令系统的计算机程序。
第三方面,本发明实施例提供了一种可读存储介质,所述可读存储介质中存储有基于第一方面所述的信令系统对应的程序。
本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:
本发明实施例提供一种信令系统,该系统以框架化的设计思想来设计,将信令抽象封装成一个框架,通过提供信令基础组件,基础组件定义有继承类调用的接口定义以及功能执行接口,功能执行接口中定义有对应的执行方法,执行方法包括参数检测方法和对应的功能实现方法,参数检测方法用于检测执行方法的传入参数是否符合预设格式,功能实现方法按接口定义的方式设定,这样,提供了信令放入基础的功能执行接口,并且,系统中的所有信令均要继承该信令基础组件,以该信令基础组件的规定来设定,形成统一的对象类型和调用方式,从而从框架层次上,信令的功能实现不容易出错。并且,系统还包括信令管理组件,信令管理组件定义有信令注册接口、获取信令接口、获取信令的日志接口,信令注册接口用于在新信令组件创建时,在信令系统中注册新信令组件,获取信令接口用于获取信令系统中所有的信令组件,信令调用日志接口用于打印信令系统中所有的信令组件。便于系统中信令的统一管理,同时基于框架可以很容易实现信令新增、信令获取、信令日志等功能。
附图说明
图1为本发明第一实施例中的一种信令系统的示意图。
具体实施方式
本发明实施例提供了一种信令系统及电子设备,通过框架的设计方式提供了统一标准的信令系统,便于信令的统一管理以及后续的设计人员设计对应的功能信令。信令系统包括:信令基础组件,所述信令基础组件定义有继承类调用的接口定义以及功能执行接口,所述功能执行接口中定义有对应的执行方法,所述执行方法包括参数检测方法和对应的功能实现方法,所述参数检测方法用于检测所述执行方法的传入参数是否符合预设格式,所述功能实现方法按所述接口定义的方式设定,所述信令系统中的所有信令均继承所述信令基础组件;信令管理组件,所述信令管理组件定义有信令注册接口、获取信令接口、获取信令的日志接口,所述信令注册接口用于在新信令组件创建时,在所述信令系统中注册所述新信令组件,所述获取信令接口用于获取所述信令系统中所有的信令组件,所述信令调用日志接口用于打印所述信令系统中所有的信令组件。
下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
实施例
请参考图1,本发明第一实施例提供一种信令系统,包括:
信令基础组件101,所述信令基础组件定义有继承类调用的接口定义以及功能执行接口,所述功能执行接口中定义有对应的执行方法,所述执行方法包括参数检测方法和对应的功能实现方法,所述参数检测方法用于检测所述执行方法的传入参数是否符合预设格式,所述功能实现方法按所述接口定义的方式设定,所述信令系统中的所有信令均继承所述信令基础组件。
其中,所述信令基础组件中定义有抽象接口,所述抽象接口通过声明一个虚拟go()函数来定义,所述虚拟go()函数等于0,所述功能执行接口继承所述抽象接口,所述功能执行接口中的执行方法编写有对应功能实现逻辑;所述信令基础组件中通过定义构造函数explicit CSignalBase(const std::string&spec)来限定所述基础组件的传入参数spec为一个字符串类型的参数。
其中,所述信令系统中定义有按预设格式编译的预设功能的信令参数,所述预设格式为信令参数名与信令参数值之间以预设字符分割。
具体的,本实施例中的信令系统以框架化的形式设定。首先,本实施例中的系统定义有按预设格式编译的预设功能的信令参数。本实施例中的系统定义一个字符串中,系统以空格来分开每个参数,而参数名称和值之间使用一个预设字符来分割。预设字符可以是“&”,还可以是其他字符,如“#”,在此,本实施例不做限制。
举例来说,本实施例中的系统需要开启打印日志的开关功能。那么定义参数:Out_log&1,其中,参数名称Out_log标示参数的名称,本实施例中的系统定义好用于本功能的日志开关,其中1标示打开日志功能,如果是0则标示关闭日志功能。
另外,本实施例中的系统还提供一些其他关键的信令参数如下:
Error&1,其中error则标示用于日志的输出功能;
Rand&1其中rand标示采用随机功能;
Arg1&1其中arg1则标示第一个参数;
Arg2&1其中arg2则标示第二个参数。
为了考虑后续的功能扩展,每个信令的功能和关键字都不一样,并且有的信令有多个参数,有的只有一个参数,而为了适应不同的个数的参数,同时为了保障后续增加信令的时候,信令系统的底层框架代码不会变化,因此信令参数需要设计成这样一种关键字(即参数名)+特殊字符&+参数值的形式。
同时,系统的其他信令基础组件以及功能信令中,信令的所有参数设计成conststd::string&spec一个字符串,从而所有的参数可以打包到一个字符串中,同时字符串大小是不受限制的,可以增加任意多个参数,通过系统中定义的基本参数的特殊字段,则可以将所有信令需要共用的参数提取出来,而一些信令的特殊参数则可以由各个信令模块自己来解析。进而,整个信令系统的参数统一定义为字符串类型,并且是参数名+特殊字符+参数值的形式,对于系统中信令参数的解析会更加容易。
进一步,本实施例中的系统提供了信令基础组件,从而封装整个信令的所有参数和操作,通过这样的封装则将信令系统设定为一个完整的整体。同时所有信令都是基于信令基础组件来继承,形成统一的对象类型和调用方式。
举例来说,本实施例中的信令基础组件可通过如下程序设定:
Class CSignalBase{
explicit CSignalBase(const std::string&spec);
virtual void go()=0;
int run(const std::string&params);
This->go();
private:std::string m_spec;
}
具体的,本实施例编写了一个类CSignalBase来做为信令基础组件,接下来本实施例中的系统编写了基础组件的接口定义,即上述程序中explicit CSignalBase(conststd::string&spec)的部分,从而定义出所有信令组件的调用方式。其中,CSignalBase是信令基础组件的构造函数,其中构造函数只需要一个参数const std::string&spec。所述信令基础组件的构造函数的参数类型为字符串类型,使用std::string类型及字符串类型的目的是,对于信令基础组件,本实施例中的系统需要统一出参数类型,而通过一个参数其是一个字符串类型,可以将所有的调用参数都包含到一个字符串中,而具体参数的解析则由具体的后续实现的信令来完成。而提供一个字符串参数则可以满足1个参数、2个参数,多个参数的情况,通过一个字符串编码将所有参数都编码起来。这样本实施例中的系统只需要提供一个只带一个参数的接口,而不需要为每增加一个参数则增加一个接口。同时为了使用者方便,本实施例中的系统会将必要的参数和默认参数都给出来,从而方便调用者,只传入必要的参数,减少数据的输入。
接下来本实施例中的系统需要定义好继承类调用的接口定义。即上述程序中virtual void go()=0的部分。本实施例中的系统定义的是抽象接口,不实现具体功能,具体实现则由后续的继承自此接口的功能来实现。其中所以本实施例中的系统使用了virtual和=0表明是一个抽象接口,后续的继承者必须实现此功能。
接下来,本实施例中的系统还定义具体功能执行的接口。即上述程序中int run(const std::string&params)的部分。定义出调用的执行方法run和参数params。在此,参数则和之前定义的参数格式保持一致。同时在此接口中本实施例中的系统会进行参数的检测和调用具体接口的实现。本实施例中的系统则会基于m_spec来解析传入的params参数。解析其中规定好的参数格式,参数个数,以及参数类型都是否符合基础组件中定义的类型。本实施例中的系统则基于字符串来解析出params中的所有参数,对应于前述定义的各种关键字进行对应的解析。解析完成后,最重要的则是调用具体的执行功能,由于本实施例中的系统抽象了执行的接口go,则可以直接调用go方法,而具体的go的实现逻辑则由每个继承自本组件的接口来实现。调用如下:
This->go();其中go就是上面定义的抽象接口go。
接下来本实施例中的系统还定义了一个成员变量private:std::string m_spec来保存传入的参数。本实施例中的系统使用private来申明成员变量,只能内部使用。
这样,在系统提供了信令基础组件情况下,就可以便于相关人员编写具体的功能信令,实现功能调用。功能信令为一个对应的功能类,
本实施例以一个简单的日志类进行举例说明,来完成打印日志的功能。首先编写一个日志类加载类Log_Signal。继承信令基础类CSignalBase。并且该类需要实现我们日志类的go方法的具体功能。
Class Log_Signal:public CSignalBase{
Public:
virtual void go(){
printf(“data\n”);。
}
}
其中go方法则是具体的功能。会依据用传入的参数来解析出需要具体的功能。例如传入的输入参数是add1&data,那么则解析出其中参与计算的参数是data,则可以将数据进行打印出来。这样,在新增信令时,底层的信令基础组件并不需要任何修改,仅需要编辑上层具体的功能程序,信令的功能能够更方便地编辑,也更容易实现。
并且,本实施例中的系统还提供了信令管理组件102,所述信令管理组件定义有信令注册接口、获取信令接口、获取信令的日志接口,所述信令注册接口用于在新信令组件创建时,在所述信令系统中注册所述新信令组件,所述获取信令接口用于获取所述信令系统中所有的信令组件,所述信令调用日志接口用于打印所述信令系统中所有的信令组件。
其中,所述信令管理组件中通过定义static std::map<std::string,maker_fn>mapSignal来以map容器的结构存储所述信令系统中的所有信令,map的键为对应信令的名称,map的值为该信令的功能。
所述信令注册接口定义为Registration(const std::string&name,maker_fnmaker_fn),所述信令注册接口的传入参数为新信令组件的名称以及所述新信令组件的功能,所述信令系统中创建新信令组件时,所述信令注册接口通过检测函数reg.count(name)来检测所述新信令组件是否已注册,所述检测函数reg.count(name)中的name为所述新信令组件的名称,如果所述检测函数reg.count(name)的值小于0,则确定所述新信令组件未在所述信令系统中注册,所述信令注册接口通过注册方法reg.insert(std::make_pair(name,maker_fn)),以map容器的结构保存所述新信令组件,其中,所述新信令组件的名称保存为map的键,所述新信令组件的功能保存为map的值,所述新信令组件对应map的键值相关联。
所述信令注册接口还用于:在创建所述新信令组件时,如果所述检测函数reg.count(name)的值大于0,则确定所述新信令组件在所述信令系统中已经注册,通过异常函数throw Error(“registration erro”+name)抛出异常,所述异常包括已注册的信令组件的名称。
具体的,本实施例中系统的信令管理组件则负责管理整个系统的所有信令组件,包括新的信令组件的注册,信令组件的检测,信令组件的调用,日志功能,获取信令的执行回调等等。信令管理组件是本实施例中系统的核心组件,负责整体模块的管理,功能分发等。具体的,本实施例以如下方式设定信令管理组件:
Class CSignalManager{本实施例中的系统编写一个类CSignalManager来做为管理组件。同时本实施例中系统的信令管理组件全局只有一个,并且需要全局任意地方都可以获取,所以本实施例将其设定为单件类来实现。编写获取此管理组件的接口CSignalManager*getInstance(){首先判断成员变量m_Instance是否为空,如果为空,则创建一个m_Instance=new CSignalManager();如果不为空则直接返回m_Instance。成员变量定义如下:
Private:static T*m_Instance;}
接下来本实施例中的系统转定义本实施例中的系统的组件指针类型。
typedef std::function<CSignalBase*()>maker_fn;通过转定义则方便后续代码的编写。
本实施例中的系统需要定义好基于信令的和功能代码进行关联的数据结构,同时本实施例中的系统也需要快速查找基于信令对应的功能。本实施例使用stl容器的map容器来存储和管理static std::map<std::string,maker_fn>mapSignal;
其中std::string则是map的键,而maker_fn则是它的值。
然后本实施例中的系统定义此组件的对外提供的功能接口。
static std::map<std::string,maker_fn>&get_registry(){
此接口则返回本实施例中的系统定义的存储对象。
Return mapSignal;}
同时本实施例中的系统需要编写对外提供注册的接口和提供获取信令功能接口。
Void Registration(const std::string&name,maker_fn maker_fn){此接口则会传入信令和信令对应的功能。本实施例中的系统之前设计的基于MAP容器则非常方便的检测是否信令已经存储,如果信令已经存在本实施例中的系统再进行注册则会导致之前注册的被现在注册的覆盖掉。所以本实施例中的系统对同样的信令只能注册一次,如果注册多次本实施例中的系统则可以提示发现了错误,从而可以提醒开发者调用错误。因此本实施例中的系统是具有自动检测的功能。
if(reg.count(name)>0)本实施例中的系统通过调用count来可以得到其map容器中对应的name存在几次,如果存在多次则其返回值会大于0,那么如果大于0则说明已经存在了,本实施例中的系统则可以告知开发者当前调用发送了错误,本实施例中的系统则可以抛出一个异常,从而应用层可以捕获到,throw Error(“registration erro”+name),其中本实施例中的系统则抛出注册异常同时携带上注册的信令名称,从而方便查找对应是哪一个,同时通过抛出异常则不会导致程序crash,同时也能让开发人员在调用时马上发现问题,及早的规避问题避免后续花费大量时间定为问题。
如果count小于0,本实施例中的系统则进行注册功能,本实施例中的系统通过insert则插入一个配对的功能,其中std::make_pair(name,maker_fn)则将名称和功能配对起来。reg.insert(std::make_pair(name,maker_fn))。
本实施例中信令管理组件提供的获取信令接口定义如下:
std::unique_ptr<CSignalBase>get_sig(const std::string&name){
本实施例中的系统编写的接口需要信令名称,返回值则是对应的信令功能。
首先,本实施例中的系统需要获取信令所有存储的信令,本实施例中的系统则可以调用之前编写的接口来获取。const std::map<std::string,maker_fn>&reg=get_registry();然后本实施例中的系统调用其find方法来查找其是否存在,本实施例中的系统定义迭代器it,其值有find来返回it=reg.find(name);那么如果it!=reg.end()则说明找到了,否则说明没有找到。如果找到了,本实施例中的系统则可以从找到的迭代器it来获取对应的功能指针return it->second。没有找到本实施例中的系统则返回一个空值NULL。
本实施例中信令管理组件提供的获取信令的日志接口定义如下:
有了本实施例中的系统上述的框架,本实施例中的系统则很方便的可用获取到所有的信令并且打印出来。通过如下程序实现:
void output_sig(){
const std::map<std::string,maker_fn>&reg=get_registry();
For(it=reg.begin();it!=reg.end();++it){
Printf(“signal name:%s\n”,it.first);
}}
本实施例中的系统编写的接口output_sig则来实现所有信令打印出来。
首先本实施例中的系统获取所有的信令注册管理对象,即const std::map<std::string,maker_fn>&reg=get_registry(),然后本实施例中的系统进行遍历,则很方便的实现所对应的功能。首先编写for循环来进行遍历,其中it则是迭代器,其初始化为reg的begin开始。然后到end则是结束。本实施例中的系统调用printf函数来进行日志的打印。其中it.first则是信令的名称。
基于上述的管理本实施例中的系统用一个循环则可以对所有的注册信令进行访问和调用。
本实施例中信令管理组件还可提供获取信令的随机调用接口,有了本实施例中的系统上述的框架,本实施例中的系统则很方便的可以编写随机的信令调用,或者本实施例中的系统在程序测试时,可以把所有的信令对应的功能都进行调用。具体调用则也是基于循环来进行调用。
进一步,本实施例中系统中,所述信令管理组件还包括信令注册辅助接口,所述信令注册辅助接口继承所述信令注册接口,所述信令注册辅助接口中定义有注册宏REGISTER_SIGNAL(name,Class),所述注册宏中传入参数为新信令组件的名称和对应的功能类,所述注册宏中创建有一个类cmd和类Class组合的名称的辅助类Registrationcmd_##Class(name,[]()->CSignalBase*{return new Class;}),所述辅助类通过调用注册接口Registration来完成所述新信令组件整个功能的注册。
具体的,本实施例中,信令注册辅助接口,则方便本实施例中的系统当需要编写新的信令时,其提供了统一的注册信令的方法,并且在注册时只用编写很少的功能则可以完成注册。本实施例中的系统编写一个宏REGISTER_SIGNAL来帮助调用者注册的时候只需要使用很简单的一行代码则可以完成整个功能。
沿用前述实施例,可按以下方式定义:
#define REGISTER_SIGNAL(name,Class)
Registration cmd_##Class(name,
[]()->CSignalBase*{return new Class;})
其中宏需要传入2个参数,一个是信令的名称,另一个则是具体的功能类。
其中本实施例中的系统则会创建一个对应的类cmd和Class组合的名称的类,其中则会调用之前编写的Registration来完成整个功能的注册。
那么对于上述本实施例中的系统编写的日志功能类,本实施例中的系统的调用则是:
REGISTER_SIGNAL("sigLog",Log_Signal);
其中本实施例中的系统定义的本实施例中的系统的信令名称则是"sigLog",而本实施例中的系统定义的功能类则是本实施例中的系统之前编写的Log_Signal。那么本实施例中的系统则基于上述的宏本实施例中的系统会创建一个类名称是sigLog_Log_Signal的Registration类,而此类则在其构造函数则会完成注册的功能。
本实施例中的方案,开发人员通过本实施例中的系统,创建新的信令组件,即针对信令来创建一个具体的类,该类需要继承信令基础组件,按信令基础组件对应的接口定义编辑功能逻辑,并且,信令管理组件会对其进行注册,在组成时,就会通过信令注册接口去检测系统中是否存在该信令对应的类,以及时的发现是否有重复的类定义,如果有重复的类,编译器则会报错,代码则编译不过,这样开发人员在编写信令组件的时候在开发阶段就能将错误及早的发现,避免后续程序执行过程中发现问题浪费大量时间定为问题。
本实施例中的系统以框架化的设计思想来设计,将信令抽象封装成一个框架,通过提供信令基础组件,基础组件定义有继承类调用的接口定义以及功能执行接口,功能执行接口中定义有对应的执行方法,执行方法包括参数检测方法和对应的功能实现方法,参数检测方法用于检测执行方法的传入参数是否符合预设格式,功能实现方法按接口定义的方式设定,这样,提供了信令放入基础的功能执行接口,并且,系统中的所有信令均要继承该信令基础组件,以该信令基础组件的规定来设定,从而从框架层次上,信令的功能实现不容易出错。并且,系统还包括信令管理组件,信令管理组件定义有信令注册接口、获取信令接口、获取信令的日志接口,信令注册接口用于在新信令组件创建时,在信令系统中注册新信令组件,获取信令接口用于获取信令系统中所有的信令组件,信令调用日志接口用于打印信令系统中所有的信令组件。便于系统中信令的统一管理,同时基于框架可以很容易实现信令新增、信令获取、信令日志等功能。从而从框架层次上,增加新的信令调用则会非常简单,也由于框架的定义也不容易出错,同时基于框架可以做很多的错误检测,增加日志信息,修改调用逻辑等等功能。
本发明的第三实施例提供了一种电子设备,所述电子设备包括第一方面实施例所述的信令系统及控制器,所述控制器包括存储器和处理器,所述存储器上存储有所述处理器执行第一实施例中的信令系统的计算机程序。
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述计算机装置中的执行过程。
所述电子设备可包括,但不仅限于控制器,处理器、存储器。本领域技术人员可以理解,上述仅仅是计算机装置的示例,并不构成对电子设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述电子设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
本发明第三实施例提供了一种计算机可读存储介质,其上存储有计算机程序,本发明第一实施例中的所述信令系统如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种调用组件的信令系统,其特征在于,包括:
信令基础组件,所述信令基础组件定义有继承类调用的接口定义以及功能执行接口,所述功能执行接口中定义有对应的执行方法,所述执行方法包括参数检测方法和对应的功能实现方法,所述参数检测方法用于检测所述执行方法的传入参数是否符合预设格式,所述功能实现方法按所述接口定义的方式设定,所述信令系统中的所有信令均继承所述信令基础组件;
信令管理组件,所述信令管理组件定义有信令注册接口、获取信令接口、获取信令的日志接口,所述信令注册接口用于在新信令组件创建时,在所述信令系统中注册所述新信令组件,所述获取信令接口用于获取所述信令系统中所有的信令组件,所述信令调用日志接口用于打印所述信令系统中所有的信令组件;
所述信令基础组件中通过定义构造函数explicit CSignalBase(const std::string&spec)来限定所述基础组件的传入参数spec为一个字符串类型的参数;其中,所述传入参数spec用于以预设形式,存储一个以上的信令参数的功能和关键字。
2.如权利要求1所述的系统,其特征在于,所述信令基础组件中定义有抽象接口,所述抽象接口通过声明一个虚拟go()函数来定义,所述虚拟go()函数等于0,所述功能执行接口继承所述抽象接口,所述功能执行接口中的执行方法编写有对应功能实现逻辑。
3.如权利要求1所述的系统,其特征在于,所述信令管理组件中通过定义staticstd::map<std::string,maker_fn>mapSignal来以map容器的结构存储所述信令系统中的所有信令,map的键为对应信令的名称,map的值为该信令的功能。
4.如权利要求3所述的系统,其特征在于,所述信令注册接口定义为Registration(const std::string&name,maker_fn maker_fn),所述信令注册接口的传入参数为新信令组件的名称以及所述新信令组件的功能,所述信令系统中创建新信令组件时,所述信令注册接口通过检测函数reg.count(name)来检测所述新信令组件是否已注册,所述检测函数reg.count(name)中的name为所述新信令组件的名称,如果所述检测函数reg.count(name)的值小于0,则确定所述新信令组件未在所述信令系统中注册,所述信令注册接口通过注册方法reg.insert(std::make_pair(name,maker_fn)),以map容器的结构保存所述新信令组件,其中,所述新信令组件的名称保存为map的键,所述新信令组件的功能保存为map的值,所述新信令组件对应map的键值相关联。
5.如权利要求4所述的系统,其特征在于,所述信令注册接口还用于:
在创建所述新信令组件时,如果所述检测函数reg.count(name)的值大于0,则确定所述新信令组件在所述信令系统中已经注册,通过异常函数throw Error(“registrationerro”+name)抛出异常,所述异常包括已注册的信令组件的名称。
6.如权利要求4所述的系统,其特征在于,所述信令管理组件还包括信令注册辅助接口,所述信令注册辅助接口继承所述信令注册接口,所述信令注册辅助接口中定义有注册宏REGISTER_SIGNAL(name,Class),所述注册宏中传入参数为新信令组件的名称和对应的功能类,所述注册宏中创建有一个类cmd和类Class组合的名称的辅助类Registrationcmd_##Class(name,[]()->CSignalBase*{return new Class;}),所述辅助类通过调用注册接口Registration来完成所述新信令组件整个功能的注册。
7.如权利要求1-6中任一权利要求所述的系统,其特征在于,所述信令系统中定义有按预设格式编译的预设功能的信令参数,所述预设格式为信令参数为字符串类型,信令参数名与信令参数值之间以预设字符分割。
8.如权利要求1-6中任一权利要求所述的系统,其特征在于,所述信令管理组件设定为单件类。
9.一种电子设备,其特征在于,所述电子设备包括权利要求1-8任一项所述的信令系统及控制器,所述控制器包括存储器和处理器,所述存储器上存储有所述处理器执行所述信令系统的计算机程序。
10.一种可读存储介质,其特征在于,所述可读存储介质中存储有权利要求1-8中任一权利要求所述的信令系统对应的程序。
CN201911401132.4A 2019-12-30 2019-12-30 一种信令系统及电子设备 Active CN113127103B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911401132.4A CN113127103B (zh) 2019-12-30 2019-12-30 一种信令系统及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911401132.4A CN113127103B (zh) 2019-12-30 2019-12-30 一种信令系统及电子设备

Publications (2)

Publication Number Publication Date
CN113127103A CN113127103A (zh) 2021-07-16
CN113127103B true CN113127103B (zh) 2023-03-24

Family

ID=76768190

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911401132.4A Active CN113127103B (zh) 2019-12-30 2019-12-30 一种信令系统及电子设备

Country Status (1)

Country Link
CN (1) CN113127103B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001092830A (ja) * 1999-09-21 2001-04-06 Sagama Joho Kagaku Kenkyusho:Kk 文字列の照合装置およびその方法
US6243859B1 (en) * 1998-11-02 2001-06-05 Hu Chen-Kuang Method of edit program codes by in time extracting and storing
JP2003036263A (ja) * 2001-07-25 2003-02-07 Cec:Kk 入力データの取扱方法
US8527943B1 (en) * 2004-02-12 2013-09-03 Raju V. Chiluvuri System and method of application development
US9639460B1 (en) * 2014-12-18 2017-05-02 Amazon Technologies, Inc. Efficient string formatting

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7526546B2 (en) * 2005-09-26 2009-04-28 Ricoh Company Limited Method and system for use of abstract classes for script implementation of HTTP to obtain information from devices
CN102402480A (zh) * 2011-10-12 2012-04-04 吴华中 电路板固件命令行调试(测试)工具
US8839266B1 (en) * 2013-07-31 2014-09-16 Vmware, Inc. Inter-application communication on mobile platforms
US9703675B2 (en) * 2014-08-11 2017-07-11 Microsoft Technology Licensing, Llc Structured logging and instrumentation framework
EP3035140B1 (en) * 2014-12-19 2018-09-12 Rolls-Royce Deutschland Ltd & Co KG Equipment health monitoring method and system
CN105573900A (zh) * 2015-12-17 2016-05-11 南京亚派科技股份有限公司 一种系统日志配置和记录方法
CN107092483A (zh) * 2017-03-24 2017-08-25 武汉斗鱼网络科技有限公司 一种自动解析日志库中数据类型的方法及系统
CN110096379B (zh) * 2019-04-30 2022-09-09 武汉斗鱼鱼乐网络科技有限公司 基于通用协议的消息分发方法、装置、设备及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6243859B1 (en) * 1998-11-02 2001-06-05 Hu Chen-Kuang Method of edit program codes by in time extracting and storing
JP2001092830A (ja) * 1999-09-21 2001-04-06 Sagama Joho Kagaku Kenkyusho:Kk 文字列の照合装置およびその方法
JP2003036263A (ja) * 2001-07-25 2003-02-07 Cec:Kk 入力データの取扱方法
US8527943B1 (en) * 2004-02-12 2013-09-03 Raju V. Chiluvuri System and method of application development
US9639460B1 (en) * 2014-12-18 2017-05-02 Amazon Technologies, Inc. Efficient string formatting

Also Published As

Publication number Publication date
CN113127103A (zh) 2021-07-16

Similar Documents

Publication Publication Date Title
CN108459962B (zh) 代码规范性检测方法、装置、终端设备及存储介质
US7552422B2 (en) Test case inheritance controlled via attributes
CN108170465B (zh) 一种版本信息管理方法、电子设备及可读存储介质
EP4307106A1 (en) Visual software development system, method and apparatus, and computer storage medium
US11537367B1 (en) Source code conversion from application program interface to policy document
CN113268243B (zh) 内存预测方法及装置、存储介质、电子设备
CN112559348B (zh) 基于jacoco的测试分析方法、系统、设备以及介质
US7577541B1 (en) Test services provider
CN115794641A (zh) 基于业务流程的造数方法、装置、设备及存储介质
CN111158987A (zh) 微服务架构的健康检查方法及装置
CN109739487B (zh) 一种业务逻辑处理方法、设备及计算机可读存储介质
CN113127103B (zh) 一种信令系统及电子设备
CN109284222B (zh) 软件单元、数据处理系统中的项目测试方法、装置及设备
CN111399849B (zh) 一种应用程序安装包的确定方法及系统
CN111949510B (zh) 测试处理方法、装置、电子设备及可读存储介质
CN109582574B (zh) 一种代码覆盖率统计方法、装置、存储介质及终端设备
CN110851370A (zh) 程序测试方法及装置、存储介质
CN108089989B (zh) 一种路径检测方法、电子设备及可读存储介质
CN116155934A (zh) 智能合约调用账本的方法、装置、电子设备和存储介质
CN109542775A (zh) 一种测试脚本的生成和执行方法及装置
CN111142735B (zh) 一种软件页面的创建方法、装置、终端设备和存储介质
CN113688031A (zh) 一种基于字节码增强技术的测试定位方法
US7082376B1 (en) State full test method executor
CN114443375A (zh) 测试方法及装置、电子装置及计算机可读存储介质
CN113704320B (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