OpenHarmony分布式调度详解|dmslite_msg_handler.c

100 篇文章 2 订阅
100 篇文章 0 订阅

往期知识点记录:

前言

foundation\distributedschedule\dmsfwk_lite\source\dmslite_msg_handler.c文件中包括两个函数:StartAbilityFromRemoteHandler()用于接收会话消息数据解析得到的启动FA的命令id,用于启动FA;ReplyMsgHandler()用于回复消息。

代码分析

远程启动ability

/**
 * 函数功能:远程启动Ability处理
 * 函数参数:
 *      tlvHead:tlv数据链表
 *      onStartAbilityDone:启动Ability的回调函数
 * 函数返回值:
 *      权限检查后返回一个StartAbilityFromRemote对象,用于启动ability
 * 描述:
 * 1.从TlvNode格式的数据中获取包名、ability名和签名
 * 2.声明一个用于封装需要检查的信息的permissionCheckInfo结构体,并将包名、ability名和签名封装在permissionCheckInfo中
 * 3.调用CheckRemotePermission进行权限检查
 * 4.如果检查不通过,返回错误码
 * 5.如果检查通过,调用StartAbilityFromRemote,启动ability
 */
int32_t StartAbilityFromRemoteHandler(const TlvNode *tlvHead, StartAbilityCallback onStartAbilityDone)
{
    // 根据tlv数据中的type值,从tlv链表中获取bundleName、abilityName、callerSignature
    const char *calleeBundleName = UnMarshallString(tlvHead, DMS_TLV_TYPE_CALLEE_BUNDLE_NAME);
    const char *calleeAbilityName = UnMarshallString(tlvHead, DMS_TLV_TYPE_CALLEE_ABILITY_NAME);
    const char *callerSignature = UnMarshallString(tlvHead, DMS_TLV_TYPE_CALLER_SIGNATURE);
    // 将bundleName、abilityName和sigture封装为一个PermissionCheckInfo对象,并进行权限检查
    PermissionCheckInfo permissionCheckInfo;
    permissionCheckInfo.calleeAbilityName = calleeAbilityName;
    permissionCheckInfo.calleeBundleName = calleeBundleName;
    permissionCheckInfo.callerSignature = callerSignature;
    int32_t errCode = CheckRemotePermission(&permissionCheckInfo);
    if (errCode != DMS_EC_SUCCESS) { // 如果不为0,权限检查不通过
        HILOGE("[Remote permission check failed]");
        return errCode;
    }
    return StartAbilityFromRemote(calleeBundleName, calleeAbilityName, onStartAbilityDone);
}

处理回复消息

/**
 * 函数功能:处理消息回复
 * 函数参数:
 *         tlvHead:tlv数据链表
 * 函数返回值:
 *        返回一个type为REPLY_ERR_CODE的Uint64类型的value
 */
int32_t ReplyMsgHandler(const TlvNode *tlvHead)
{
    CloseDMSSession(); // 关闭Session会话,关闭相应的sessionId,将全局变量g_curSessionId和g_curBusy设置为默认值
    return UnMarshallUint64(tlvHead, REPLY_ERR_CODE); // 将TlvNode中的value值转换为Uint64类型并返回
}

总结

该文件中主要包含一些对解析后的命令id的操作,目前只支持两种操作——远程启动ability和回复消息。

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请看下图提示:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值