在service中提供了服务的基本类型和常量。头文件位于distributedschedule_samgr_lite\interfaces\kits\samgr\service.h。该文件主要用于服务开发,提供基本功能,如服务的生命周期功能、继承宏、任务配置等。
//定义task类型,这些枚举用于配置任务类型
typedef enum TaskType {
SHARED_TASK = 0, //根据服务的优先级共享任务
SINGLE_TASK = 1, //服务独占的任务
SPECIFIED_TASK = 2, //由多个服务共享的指定任务
NO_TASK = 0xFF, //无任务
} TaskType;
//用于指定多服务共享任务,这些枚举用于指定多服务共享任务
typedef enum SpecifyTag {
LEVEL_HIGH = 0,
LEVEL_MIDDLE = 1,
LEVEL_LOW = 2,
LEVEL_CUSTOM_BEGIN,//自定义
} SpecifyTag;
//用于配置任务优先级,优先级的有效范围是(9,39)
typedef enum TaskPriority {
//Low: (9, 15)
PRI_LOW = 9,
// [16, 23)
PRI_BELOW_NORMAL = 16,
//[24, 31)
PRI_NORMAL = 24, //日志服务可用
//高于正常优先级:[32,39),通信服务可用
PRI_ABOVE_NORMAL = 32,
//优先级上限
PRI_BUTT = 39,
} TaskPriority;
//该结构定义了服务的任务配置,包括任务优先级、堆栈大小、队列大小、任务类型和共享任务ID
struct TaskConfig {
int16 level; //值来自SpecifyTag
//任务优先级
int16 priority; //值来自TaskPriority
uint16 stackSize; //任务栈的大小
uint16 queueSize; //任务队列的大小
//任务类型
uint8 taskFlags; //值来自TaskType
};
struct Service {
//Samgr在服务注册和启动期间调用此函数
//@service指向服务的指针。
//如果成功获取服务名,返回一个不超过16字节的常量字符串;如果获取服务名失败,返回NULL
const char *(*GetName)(Service *service);//获取service名
//服务初始化------在Samgr给一个服务分配任务后,该服务在自己的任务中调用函数
//@service指向服务的指针。
//@identity系统分配给服务的ID
//如果初始化成功返回TRUE,否则返回FALSE。
BOOL (*Initialize)(Service *service, Identity identity);
//处理service消息-------该函数用于处理调用者通过IUnknown发送的请求。
//@service指向服务的指针。
//@request请求数据的指针。
//如果消息处理成功返回TRUE,处理失败返回FALSE
BOOL (*MessageHandle)(Service *service, Request *request);
//获取一个service的task配置
TaskConfig (*GetTaskConfig)(Service *service);
};
//指示用于从service类继承成员的宏。
//这个宏提供了继承service类生命周期函数的功能
#define INHERIT_SERVICE \
const char *(*GetName)(Service * service); \
BOOL (*Initialize)(Service * service, Identity identity); \
BOOL (*MessageHandle)(Service * service, Request * request); \
TaskConfig (*GetTaskConfig)(Service * service)