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

📌往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)

①📖 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

②📖嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

③📖 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

④📖 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

⑤📖 记录一场鸿蒙开发岗位面试经历~

⑥📖 持续更新中……


引言

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

数据结构详解

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 "";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值