📌往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)
①📖 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
②📖嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
③📖 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
④📖 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
⑤📖 记录一场鸿蒙开发岗位面试经历~
⑥📖 持续更新中……
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);