具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一消息格式转换方法
本发明实施例采用配置文件的形式,将每一个命令字需要从内部消息中取出的参数定义到配置文件中,然后采用统一的命令处理函数,从配置文件中获取命令字的参数,添加到设备消息中,实现了内部消息与设备消息的格式转换。如图1所示,消息格式转换方法包括:
S11、接收设备的内部消息,内部消息包括命令字;
S12、利用统一的命令处理函数从预先设置的配置文件中获取与所述命令字相应的参数;其中,所述配置文件定义有所述命令字需要从内部消息中取出的参数信息。
配置文件的内容可以包括:命令字名称、命令字的值,及与所述命令字对应的参数、参数值和参数类型等。例如,配置文件格式可以如下代码所示:
-----------------------------------------------------------------------------------
<COMMANDS>
<Command key=″GET_ALRAM″CMDCode=″54323″>
<Parameter TAG=″TAG_GET_ALARM_START_SEQUENCE″value=″0″Type=″unsigned long″/>
<Parameter TAG=″TAG_GET_ALARM_COUNT″value=″0″Type=″unsigned long″/>
<Parameter TAG=″TAG_INVALID″value=″0″Type=″unsigned long″/>
<Parameter TAG=″TAG_INVALID″value=″0″Type=″unsigned long″/>
</Command>
<Command key=″XXX″CMDCode=″12345″>
<Parameter TAG=″TAG1″Value=″0″Type=″string″/>
...
</Command>
...
</COMMANDS>
-------------------------------------------------------
上述代码中,各个字段描述如下:
COMMANDS段:用来描述所有命令;
Command段:用来描述一个命令的命令字及参数;
Command段中的Key表示命令字的名称;
Command段中的CMDCode表示命令字的值。
Parameter段:用来描述一个参数;
TAG表述参数的标记符,Value表示一个默认值;Type表示参数的类型;
如果参数TAG为“TAG_INVALID”,则表述此命令参数填写默认值即可。
S13、根据获取的参数创建预定格式的设备消息。
根据配置文件的定义取出相应的参数,并填充到设备消息中便生成了所需要的设备消息。利用所述命令处理函数从所述内部消息中获取命令字的名称,根据所述命令字的名称从所述配置文件中获取相应命令字的值、命令字的参数和参数值,将所述命令字的值、命令字的参数和参数值填充到预定格式的设备消息中。
采用本发明实施例提供的消息格式转换方法,可以将所有的命令处理函数实现改为一个,如查询告警的命令通过配置文件就可以找到要从消息格式A中获取什么参数,并顺序填到消息格式B中即可。统一的命令处理函数可以参考如下:
--------------------------------------------------------------
int porocessMessage(MSGType1 in,MSGType2*out)
{
string strCommand=getCommandName(in.cmd());//命令字转换成Command key
map<std::string,Uint32>::iterator it_cmd;
it_cmd=m_cmdTable.find(strCommand);//从配置文件中读取命令字的值
int u32Cmd=it_cmd->second;
out.cmd(u32Cmd);
std::vector<CParam*>::iterator iter=pCmd->_params.begin();
for(;iter!=pCmd->_params.end();iter++)
//获取命令中的参数,一个一个参数处理
{
CParam*pPara=(*iter);
if(pPara->TAG==TAG_INVALID)
{
out->addParameter(pPara->value);
}
else
{
if (″string″==pPara->type)
{
string value=in.getParameterStr(pPara->TAG);
out->addParameter(value);
}
else if(″usingned long″==pPara->type)
{
int value=in.getParameter(pPara->TAG);
out->addParameter(value);
}
}
}
return RETURN OK;
}
----------------------------------------------------------------
本发明实施例的消息格式转换方法,对所有的命令字只需要同一个消息处理函数,增强接口适配过程中的可扩展性;对接口的修改不需要修改相应的代码,只需要修改相应的配置文件即可。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
如图2所示,是本发明实施例提供的网络设备的代理装置的结构示意图,包括:
接收单元21,用于接收设备的内部消息,所述内部消息包括命令字;
消息生成单元22,用于利用统一的命令处理函数从预先设置的配置文件中获取与所述命令字相应的参数,并根据获取的参数创建预定格式的设备消息;其中,所述配置文件定义有所述命令字需要从内部消息中取出的参数信息。
消息生成单元22包括:
命令字获取单元221,用于利用所述命令处理函数从所述内部消息中获取命令字的名称;
参数获取单元222,用于根据所述命令字的名称从所述配置文件中获取相应命令字的值、命令字的参数和参数值;
构建单元223,用于将所述命令字的值、命令字的参数和参数值填充到预定格式的设备消息中,构建所述预定格式的设备消息。
代理装置还包括第一存储单元23,用于存储所述配置文件。配置文件的内容可以包括命令字名称、命令字的值,及与所述命令字对应的参数、参数值和参数类型。
图3是本发明实施例的网络设备的代理装置执行消息格式转换方法的流程示意图,代理装置30接收内部消息31,从接收到的内部消息31中获取命令字。代理装置30创建设备消息对象,生成初始的设备消息33,根据内部消31息包含的命令字从配置文件中循环读取设备消息所需要的参数,依次将获取的参数值添加到设备消息中,而后代理装置返回生成的设备消息。
本发明实施例的网络设备的代理装置,对所有的命令字只需要同一个消息处理函数,增强接口适配过程中的可扩展性;对接口的修改不需要修改相应的代码,只需要修改相应的配置文件即可。
如图4所示,本发明实施例还提供了一种网络设备41,网络设备41包括有第二存储单元411,用于存储配置文件,所述配置文件用于实现适配不同网管接口,将设备的内部消息转换成不同网管协议格式的设备消息,所述配置文件定义有所述命令字需要从内部消息中取出的参数信息。配置文件的内容可以包括:命令字名称、命令字的值,及与所述命令字对应的参数、参数值和参数类型。
网络设备41还包括:
代理装置412,用于接收设备的内部消息,所述内部消息包括命令字;利用统一的命令处理函数从所述配置文件中获取与所述命令字相应的参数,并根据获取的参数创建预定格式的设备消息。
本发明实施例的网络设备,在进行消息格式转换时,对所有的命令字只需要同一个消息处理函数,增强接口适配过程中的可扩展性;对接口的修改不需要修改相应的代码,只需要修改相应的配置文件即可。
以上所述仅为本发明的几个实施例,本领域的技术人员依据申请文件公开的可以对本发明进行各种改动或变型而不脱离本发明的精神和范围。