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

70 阅读4分钟

引言

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

数据结构详解

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
};
DD一下:欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

函数实现详解

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 "";
}