OpenHarmony分布式调度详解|Service和Feature的定义和注册(1)

往期知识点记录:

前言

在进行分布式任务调度之前,首先要对分布式Service和Feature进行注册,注册Feature之前需要注册一个与之同名的Service,Feature才能注册成功。

Service的定义和注册

Service的定义

Service的定义和注册在foundation\distributedschedule\dmsfwk_lite\source\dmslite.c文件中,相应的定义如下,其中,g_distributedService是全局唯一的分布式服务对象:

// 该定义实现了面向对象中构造函数的概念
static DistributedService g_distributedService = {
    .GetName = GetName,
    .Initialize = Initialize,
    .MessageHandle = MessageHandle,
    .GetTaskConfig = GetTaskConfig
};

DistributedService结构体的定义如下:

typedef struct {
    INHERIT_SERVICE;
    Identity identity;
} DistributedService;

DistributedService结构体中继承了INHERIT_SERVICE宏,INHERIT_SERVICE宏中包含四个成员,其定义如下:

/**
* INHERIT_SERVICE包含了所有Service都要有的成员
* GetName():获取服务名
* Initialize():初始化服务
* MessageHandler():消息处理
* GetTaskConfig():获取任务配置信息,包括level、priority、stackSize、queueSize、taskFlags
*/
#define INHERIT_SERVICE                                          \
    const char *(*GetName)(Service * service);                   \
    BOOL (*Initialize)(Service * service, Identity identity);    \
    BOOL (*MessageHandle)(Service * service, Request * request); \
    TaskConfig (*GetTaskConfig)(Service * service)

Service的注册

Service注册对应的代码如下:

static void Init()
{
    // 使用全局唯一的g_distributedService调用SAMGR对象注册分布式服务,并将注册结果打印至日志
    BOOL result = SAMGR_GetInstance()->RegisterService((Service *)&g_distributedService);
    HILOGI("[dms service start %s]", result ? "success" : "failed");
}
// 使用SYS_SERVICE_INIT定义了分布式调度服务的初始化函数
SYS_SERVICE_INIT(Init);

Feature的定义和注册

Feature的定义

Feature的定义和注册与服务类似,在foundation\distributedschedule\dmsfwk_lite\source\dmslite_feature.c文件中实现,相应的定义如下:

DmsLite g_dmslite = {
    /* feature functions */
    .GetName = GetName,
    .OnInitialize = OnInitialize,
    .OnStop = OnStop,
    .OnMessage = OnMessage,
    .identity = {-1, -1, NULL},
    /* dms interface for other subsystems */
    DEFAULT_IUNKNOWN_ENTRY_BEGIN,
    .StartRemoteAbility = StartRemoteAbilityInner,
    DEFAULT_IUNKNOWN_ENTRY_END
};

DmsLite结构体的定义如下:

typedef struct {
    /* as a feature */
    INHERIT_FEATURE;
    /* implement the dmslite interface */
    INHERIT_IUNKNOWNENTRY(DmsProxy);
    Identity identity;
} DmsLite;

DmsLite中继承了INHERIT_FEATURE宏,包含四个成员,定义如下:

typedef struct {
    /* as a feature */
    INHERIT_FEATURE;
    /* implement the dmslite interface */
    INHERIT_IUNKNOWNENTRY(DmsProxy);
    Identity identity;
} DmsLite;

Feature的注册

Feature注册的代码如下:

 // 使用g_dmslite调用SAMGR_GetInstance()得到Samgr的对象,并注册Feature和FeatureApi
static void Init()
{
    BOOL result = SAMGR_GetInstance()->RegisterFeature(DISTRIBUTED_SCHEDULE_SERVICE, (Feature*) &g_dmslite);
    if (!result) {
        HILOGE("[dms register feature failed]");
    }
    result = SAMGR_GetInstance()->RegisterFeatureApi(DISTRIBUTED_SCHEDULE_SERVICE,
        DMSLITE_FEATURE, GET_IUNKNOWN(g_dmslite));
    if (!result) {
        HILOGE("[dms register feature api failed]");
    }
}
// SYS_FEATURE_INIT和SYS_SERVICE_INIT类似,用来初始化Feature的Init()函数
SYS_FEATURE_INIT(Init);

总结

Service和Feature的注册是分布式任务调度的先前条件,后续的步骤都需在该条件下进行。Service和Feature在foundation\distributedschedule\safwk_lite\src\main.c文件中被注册,由g_dmslite中的OnInitialize()初始化,由软总线发布,并创建一个TCP的Session会话,用于解析TCP数据。

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请看下图提示:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值