往期知识点记录:
- 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
- OpenHarmony轻量系统服务管理|samgr_server功能详解(一)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(二)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(三)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(四)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(五)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(六)
- OpenHarmony分布式调度详解|dmslite.c
- OpenHarmony分布式调度详解|dmslite_feature.c 源码阅读
- OpenHarmony分布式调度详解|dmslite_session.c
- 持续更新中……
引言
轻量级分布式会话的入口,以及返回状态信息和写入日志。
数据结构详解
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🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请看下图提示: