您当前的位置: 首页 > 

小生叫安辰

暂无认证

  • 4浏览

    0关注

    105博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

鸿蒙源码分析(七十)

小生叫安辰 发布时间:2021-10-30 21:15:08 ,浏览量:4

service和feature介绍

分布式任务调度中常常出现这两个概念——service和feature。这一片我们主要介绍这两个概念。对分布式Service和Feature进行注册,注册Feature之前需要注册一个与之同名的Service,Feature才能注册成功。这里面存在一个从属关系,就是feature可以理解为一个子功能,挂在service下面

service篇

1、service的定义 g_distributedService是一个全局对象

static DistributedService g_distributedService = {
    .GetName = GetName,
    .Initialize = Initialize,
    .MessageHandle = MessageHandle,
    .GetTaskConfig = GetTaskConfig
};

2、数据结构 分布式服务的定义就是一个身份标识加一个服务的继承宏

typedef struct {
    INHERIT_SERVICE; //服务宏
    Identity identity; //身份信息
} DistributedService;

宏服务 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)

4、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篇

1、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
};

2、DmsLite结构体

typedef struct {
    INHERIT_FEATURE;
    INHERIT_IUNKNOWNENTRY(DmsProxy);//实现DMSLite接口
    Identity identity; //身份标识
} DmsLite;

宏的说明 INHERIT_FEATURE宏中定义了所有Feature都要有的成员 GetName():获取Feature的名称 OnInitialize():对Feature进行初始化 OnStop():停止Feature OnMessage():Feature的消息的处理函数

#define INHERIT_FEATURE                                                         \
    const char *(*GetName)(Feature *feature);                                   \
    void (*OnInitialize)(Feature *feature, Service *parent, Identity identity); \
    void (*OnStop)(Feature *feature, Identity identity);                        \
    BOOL (*OnMessage)(Feature *feature, Request *request)

3、feature的注册函数 这里的主要函数SAMGR_GetInstance(),用来实现一个samgr的对象,注册对应的feature和api

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);
关注
打赏
1635606302
查看更多评论
立即登录/注册

微信扫码登录

0.0452s