插件开发技术说明(3)---letein插件

本文详细介绍了如何使用协议脚本和协议检查器简化企业注册过程,包括参数约束描述、代码实现及协议升级。通过XML文件定义协议参数约束,减少编码工作量并确保变化时无需频繁修改程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文描述以下内容:

.如何利用协议脚本校验参数

.如何利用协议检查器访问参数

 

1.协议脚本基本介绍

支持利用XML文件描述协议参数的约束,称为协议规则文件,关于每个协议的内容称为协议脚本

利用协议脚本可以简化编码,且在变化时不需要修改程序..(更多特性以后介绍).

每个插件可以定义一个协议规则文件,文件名与插件同名,扩展名为:pr.

letein的协议规则文件letein.pr,内容如下:

<?xml version="1.0" encoding="gb2312" standalone="yes" ?>
<protocol>
<msgs>
<msg id="601" type="5" desc="企业注册">
<parameters>
<parameter>
<name>Name,Address,Manager,Contact,Account,Pswd,Mobile,VerifyCode</name> 
<comment>企业名称,地址,负责人,联系人,账号,密码,联系人手机,验证码</comment> 
<nullable>false</nullable>  
</parameter>

<parameter>
<name>Tele,Fax,Email,ManagerTel,ManagerMobile</name> 
<comment>电话,传真,Email,负责人电话,负责人手机</comment> 
<nullable>true</nullable>  
</parameter>

<parameter>
<name>OrgType,AreaId,Postcode</name> 
<comment>企业类型,区域编码,邮编</comment> 
<type>1</type> 
<nullable>true</nullable>  
</parameter>

</parameters>
</msg>

</msgs>
</protocol>


2.主要代码

协议:601-Request,该协议不需要安全验证.

处理企业注册请求.

MSG_FUNC_MAP CLetein::func_[] = {
	{601,MT_REQUEST,(MSGFUNC)&CLetein::OnRegister,true,"企业注册",""}, 
};

////////////////////////////////////////////////////////////////////////////////
int CLetein::Initialize() {
	parent::Initialize();

	sec_->SetProtAuthProp(0,601,false);
	return 0;
}

////////////////////////////////////////////////////////////////////////////////
int CLetein::OnRegister(CWrappedMsg<> *in,vector<CWrappedMsg<> *> &out,DISPATCH_RESULT &or) {
	CMsg *msg = in->msg;
	///< 协议检查器对letein.pr检查的结果,验证不通过时不会调用协议处理函数.
	IProtCheckResult* chk_result = or.chk_result;

	char *verify_code = 0;
	chk_result->GetParam("VerifyCode",&verify_code);

	///< @todo 检查短信验证码

	CEnterprise org;
	///< 从协议检查器获取企业对象成员信息
	chk_result->GetParam("Name",org.name_);
	chk_result->GetParam("OrgType",*(unsigned int*)&org.type_);
	chk_result->GetParam("AreaId",org.area_id_);
	chk_result->GetParam("Address",org.addr_);
	chk_result->GetParam("Postcode",org.postcode_);
	chk_result->GetParam("Tele",org.tele_);
	chk_result->GetParam("Fax",org.fax_);
	chk_result->GetParam("Email",org.email_);
	chk_result->GetParam("ManagerTel",org.mgr_tele_);
	chk_result->GetParam("ManagerMobile",org.mgr_mobile_);
	chk_result->GetParam("Contact",org.contract_);
	char *account = 0;
	chk_result->GetParam("Account",&account);
	char *pswd = 0;
	unsigned int pswd_len = 0; ///< @todo 密码目前没有加密
	chk_result->GetParam("Pswd",&pswd);
	chk_result->GetParam("Mobile",org.contract_mobile_);

	GETDBC(pdbor,this->local_dbc_.c_str());
	FAIL_RETURN(pdbor->BeginTrans(),,-1);
	///< 分配企业ID
	SLIC_EID eid = CEnterprise::ApplyID(org.type_);
	if (eid==-1) {
		return -1;
	}
	///< 分配主站
	SLIC_SITE_ID site_id = org.AssignSite();
	if (site_id==-1) {
		return -1;
	}
	if (org.Save()) 
		return -1;

	///< @todo 创建用户

	FAIL_RETURN(pdbor->CommitTrans(),,-1);

	return 0;
}
////////////////////////////////////////////////////////////////////////////////


3.框架升级

IProtCheckResult增加2个方法:

class IProtCheckResult {
public:
 virtual int GetParam(const char *name,string &val) = 0;
 virtual int GetParam(const char *name,char **val,unsigned int &len) = 0;
};

目的分别是:

.支持string类型变量

.支持二进制数据访问

 

xebo版本:4.5

 

 

 

内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值