往期知识点记录:
- 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总
- OpenHarmony轻量系统服务管理|samgr_server功能详解(一)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(二)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(三)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(四)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(五)
- OpenHarmony轻量系统服务管理|samgr_server功能详解(六)
- OpenHarmony分布式调度详解|dmslite.c
- 持续更新中……
dmslite.c 源码文件阅读
初始化服务结构体
// 初始化分布式服务结构体
static DistributedService g_distributedService = {
.GetName = GetName,
.Initialize = Initialize,
.MessageHandle = MessageHandle,
.GetTaskConfig = GetTaskConfig
};
基本模块
基本模块分为五部分:
GetName(Service *service)
:获取服务名称
/**
* 函数功能:获取服务名称
* 参数:
* service:服务名称
* 返回值:服务名
* */
static const char *GetName(Service *service)
{
if (service == NULL) {
return EMPTY_SERVICE_NAME;
}
return DISTRIBUTED_SCHEDULE_SERVICE;
}
Initialize(Service *service, Identity identity)
:Servcie 初始化函数,一般是要保存 Service 初始化生成的身份信息用于后续收发消息
/**
* 函数功能:Servcie 初始化函数,一般是要保存 Service 初始化生成的身份信息用于后续收发消息
* 参数:
* service:服务名称
* identity:标识服务和 feature
* 返回值:服务名
* */
static BOOL Initialize(Service *service, Identity identity)
{
if (service == NULL) {
return FALSE;
}
((DistributedService*) service)->identity = identity; // ID 标识
return TRUE;
}
MessageHandle(Service *service, Request *request)
:信息处理函数
/**
* 函数功能:信息处理函数
* 参数:
* service:服务名称
* request:请求内容
* */
static BOOL MessageHandle(Service *service, Request *request)
{
if (request == NULL || service == NULL) { // 参数检验
return FALSE;
}
/* process for a specific service-level msgId can be added below */
switch (request->msgId) {
default: {
HILOGW("[Unkonwn msgId = %d]", request->msgId);
break;
}
}
return TRUE;
}
GetTaskConfig(Service *service)
:返回 Service 对应的 Task 配置
/**
* 函数功能:返回 Service 对应的 Task 配置
*
* */
static TaskConfig GetTaskConfig(Service *service)
{
// LEVEL_HIGH:多服务共享任务的ID
// PRI_NORMAL:服务优先级信息
// STACK_SIZE:任务栈容量的大小
// QUEUE_SIZE:任务队列的大小
// SINGLE_TASK:任务类型
TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, STACK_SIZE, QUEUE_SIZE, SINGLE_TASK};
return config;
}
Init()
:初始化服务,通过获取实例,来注册服务
static void Init()
{
/**
* 函数功能:初始化服务,通过获取实例,来注册服务
* 参数:
* g_distributedService:全局分布式服务
* */
BOOL result = SAMGR_GetInstance()->RegisterService((Service *)&g_distributedService);
HILOGI("[dms service start %s]", result ? "success" : "failed");
}
SYS_SERVICE_INIT(Init);
写在最后
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请看下图提示: