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

100 篇文章 2 订阅
100 篇文章 1 订阅

往期知识点记录:

引言

轻量级分布式会话的入口,以及返回状态信息和写入日志。

数据结构详解

static PublishInfo g_publishInfo = {
    .publishId = DMS_PUBLISHID, // 服务发布的 ID
    .mode = DISCOVER_MODE_ACTIVE, // 服务发布的模式
    .medium = COAP, // 服务发布的媒介
    .freq = MID, // 服务发布的频率
    .capability = CAPABILITY, // 服务的载荷量
    .capabilityData = (unsigned char *)CAPABILITY_DATA, // 服务的数据
    .dataLen = CAPABILITY_DATA_LENGTH, // 服务发布数据的最大容量
};
static IPublishCallback g_publishCallback = {
    .onPublishSuccess = OnPublishSuccess, // 发布成功的回调函数
    .onPublishFail = OnPublishFail, // 发布失败的回调函数
};
// 当会话打开后,该结构体会被调用
static struct ISessionListener g_sessionCallback = {
    .onBytesReceived = OnBytesReceived,  // 通知会话的数据被收到了
    .onSessionOpened = OnSessionOpened,  // 用来验证会话或者是初始化相关的会话资源
    .onSessionClosed = OnSessionClosed   // 释放会话的资源
};
static IDmsFeatureCallback g_dmsFeatureCallback = {
    .onTlvParseDone = NULL, // 解析 tlv 消息
    .onStartAbilityDone = OnStartAbilityDone,  // 启动 ability
};

函数实现详解

void OnStartAbilityDone(int8_t errCode)
{
    HILOGD("[onStartAbilityDone errCode = %d]", errCode);  // 将启动 ability 的状态写入日志
}
/*
    函数功能:通知会话的数据已被接收
    函数参数:@sessionId:会话 ID
             @data:会话数据
             @dataLen:会话数据的长度
 * */
void OnBytesReceived(int32_t sessionId, const void *data, uint32_t dataLen)
{
    // 会话数据的结构体
    CommuMessage commuMessage;
    commuMessage.payloadLength = dataLen;  // 会话数据的长度
    commuMessage.payload = data;  // 会话数据
    // 处理会话数据
    int32_t errCode  = ProcessCommuMsg(&commuMessage, &g_dmsFeatureCallback);
    HILOGI("[ProcessCommuMsg errCode = %d]", errCode); // 处理消息后的状态码,将其写入日志
}
/*
    函数功能:释放资源
    函数参数:@sessionId:会话 ID
*/
void OnSessionClosed(int32_t sessionId)
{
    HILOGD("[function called]"); // 将会话关闭的操作写入日志
}
/*
    函数功能:用来验证会话或者是初始化相关的会话资源
    函数参数:@sessionId:会话 ID
*/
int32_t OnSessionOpened(int32_t sessionId)
{
    HILOGD("[function called]");  // 开启会话,写入日志
    return ACCEPT_SESSION_OPEN;
}
/*
    函数功能:服务发布成功,开启 tcp
    函数参数:@publishId:服务发布的 ID
*/
static void OnPublishSuccess(int32_t publishId)
{
    RegisterTcpCallback();  // 注册 tcp 回调函数
    HILOGI("[dms service publish success]"); // 发布成功
}
/*
    函数功能:服务发布失败,将其写入日志
    函数参数:@publishId:服务发布的 ID
             @reason: 发布失败的原因
*/
static void OnPublishFail(int32_t publishId, PublishFailReason reason)
{
    HILOGW("[dms service publish failed reason = %d]", (int32_t) reason);
}
//初始化软总线服务
void InitSoftbusService()
{
    int32_t ret = PublishService(MODULE_NAME, &g_publishInfo, &g_publishCallback);  //进行发布服务
    if (ret != EC_SUCCESS) {  // 校验是否发布服务成功
        HILOGW("[PublishService failed]");
    }
}
//注册 tcp ,进行连接
void RegisterTcpCallback()
{
    if (getuid() != FOUNDATION_UID) {  // 判断用户的合法性
        HILOGE("[Only dtbschedsrv can register dms bus]");
        return;
    }
    int32_t errCode = CreateSessionServer(DMS_MODULE_NAME, DMS_SESSION_NAME, &g_sessionCallback);  // 创建会话的服务器
    HILOGD("[Register %s, errCode = %d]", (errCode == EC_SUCCESS) ? "success" : "failed", errCode); // 将注册的状态写入日志
}
/*
    函数功能:处理收到的数据
    函数参数:@sessionId:会话 ID
             @data:会话数据
             @dataLen:会话数据的长度
*/
void HandleBytesReceived(int32_t sessionId, const void *data, uint32_t dataLen)
{
    HILOGD("[function called]");
}
/*
    函数功能:会话关闭写入日志
    函数参数:@sessionId:会话 ID
*/
void HandleSessionClosed(int32_t sessionId)
{
    HILOGD("[function called]");
}
/*
    函数功能:会话打开写入日志
    函数参数:@sessionId:会话数据
    函数返回:返回开启的成功状态码
*/
int32_t HandleSessionOpened(int32_t sessionId)
{
    HILOGD("[function called]");
    return EC_SUCCESS;
}
/*
    函数功能:将开启分布式会话写到日志中
    函数返回:返回创建的成功状态码
*/
int32_t CreateDMSSessionServer()
{
    HILOGD("[function called]");
    return EC_SUCCESS;
}
/*
    函数功能:将关闭分布式会话的调用,写到日志中
    函数返回:返回成功状态码
*/
int32_t CloseDMSSessionServer()
{
    HILOGD("[function called]");
    return EC_SUCCESS;
}
/*
    函数功能:开启分布式的会话,写入日志
    返回值:成功的状态码
*/
int32_t OpenDMSSession()
{
    HILOGD("[function called]");
    return EC_SUCCESS;
}
/*
    函数功能:将发送分布式消息的函数调用情况,写入日志中
    函数参数:@data:会话的数据
             @len:会话的长度
    返回值:返回成功的状态码
*/
int32_t SendDmsMessage(char *data, int32_t len)
{
    HILOGD("[function called]");
    return EC_SUCCESS;
}
//关闭分布式的调用情况,写进日志中
void CloseDMSSession()
{
    HILOGD("[function called]");
}
/*
    函数功能:将添加设备管理监听者的调用函数情况,写入日志中
    函数返回: 返回成功的状态
*/
int32_t AddDevMgrListener()
{
    HILOGD("[function called]");
    return EC_SUCCESS;
}
//注销设备管理监听者的调用情况写入日志中
int32_t UnRegisterDevMgrListener()
{
    HILOGD("[function called]");
    return EC_SUCCESS;
}
//获取另一台设备的ID,这里应该是为了以后扩展适应,并没有实现
char* GetPeerId()
{
    return "";
}

写在最后

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值