模块二interfaces下头文件解析(3)

distributedschedule_samgr_lite/interfaces/kits/samgr/message.h

该文件提供消息通信API,帮助实现{@link IUnknown}的异步函数,此API用于实现{@link IUnknown}的异步函数。

该函数的功能是处理异步响应,当服务或功能使用{@link IUnknown}发送请求时,将使用此函数。

typedef void (*Handler)(const Request *request, const Response *response);

如果调用方是功能部件,则此函数用于处理该功能部件处理请求后发送的响应,如果调用方是服务,处理程序将在服务线程中运行。

#pragma pack(1) //将用于消息交互,因此使用单字节对齐

该结构体提供了标识服务和功能,使用此结构来标识{@link IUnknown}功能,消息将通过{@link IUnknown}的异步函数发送到该功能。

struct Identity {
	int16 serviceId;    //服务ID
	int16 featureId;    //特征ID
    MQueueId queueId;   //消息队列ID
};

该结构体的作用定义一个请求。

struct Request {
	int16 msgId;    //消息ID
	int16 len;      //数据长度
	void *data;     //数据内容
    uint32 msgValue;    //消息值,由开发人员定义
};

该结构体定义了一个响应,此结构用于在服务或功能的消息处理功能处理请求后发送响应。

struct Response {
	void *data; //数据内容
	int16 len;  //数据长度
};
#pragma pack()

如果数据不为空且长度不为0,系统将自动释放数据。

该函数的功能是向指定标识的服务或功能发送请求。

int32 SAMGR_SendRequest(const Identity *identity, const Request *request, Handler handler);
//identity指示指向处理消息的功能或服务的ID的指针
//request表示指向请求的指针
//handler表示处理响应的函数,如果该值为NULL,则无需响应

如果请求成功发送,则返回EC_SUCCESS;如果请求未能发送,则返回其他错误代码。调用方需要释放请求中应用的内存。

该函数向多个服务或功能发送请求以节省内存,此函数用于发布{@link Broadcast}服务的主题以广播消息。

uint32 *SAMGR_SendSharedRequest(const Identity *identity, const Request *request, uint32 *token, Handler handler);
//identity指示指向服务或功能的ID的指针,请求将发送到该ID。
//request表示指向请求的指针。
//token指示指向引用计数的指针。
//handler表示处理响应的函数,如果该值为NULL,则无需响应。

如果请求成功发送,则返回令牌;如果请求未能发送,则返回NULL

  • 确保由标识指定的线程在所有消息发送后处理该消息。

常见做法:在发送请求之前添加锁,并在处理过程中添加相同的锁

  • 如果返回了NULL,则调用者需要释放请求的内存
  • 该函数向功能线程发送调用方的请求和响应。直接调用处理程序来处理请求和响应,而不使用消息处理函数。(广播服务的定制功能),此函数用于发布{@link Broadcast}服务的主题以广播消息。
    每次调用此函数时,引用计数的值都会增加一。

    int32 SAMGR_SendSharedDirectRequest(const Identity *id, const Request *req, const Response *resp, uint32 **ref,
                                        Handler handler);
     //id表示指向请求和响应发送到的服务或功能id的指针。
     //request表示指向请求的指针。
     //resp表示指向响应的指针。
     //ref表示参考计数。
     //handler表示处理请求和响应的函数,此参数不能为空。
    

    如果请求和响应成功发送,则返回EC_SUCCESS;如果请求和响应未能发送,则返回其他错误代码。

    • 确保由标识指定的线程在所有消息发送后处理该消息。常见做法:在发送请求之前添加锁,并在处理过程中添加相同的锁
    • 如果返回NULL,则调用者需要释放请求和响应的内存
    • 如果每次发送请求时响应都会更改,请确保不会释放响应。(将len设置为0,响应的数据将成为驻留内存。)

    该函数的功能是在处理请求后发送响应,调用此函数是为了在服务的{@link MessageHandle}或功能的{@link OnMessage}处理请求后发送响应。

    int32 SAMGR_SendResponse(const Request *request, const Response *response);
     //request表示指向原始请求的指针。
     //response表示指向响应内容的指针
    

    如果成功发送响应,则返回EC_SUCCESS;如果响应未能发送,则返回其他错误代码。

    • 此函数只能在{@link MessageHandle}或{@link OnMessage}中调用
    • 请求必须是从{@link MessageHandle}或{@link OnMessage}传递的原始请求。否则,将发生内存异常
    • 调用方发送请求时,必须执行处理程序回调函数
    • 响应被发送到请求者所属服务的消息队列进行处理。因此,请求者应该在非阻塞模式下等待响应

    该函数在处理原始请求后,向指定的服务或功能发送响应。(用于引导的自定义功能),调用此函数是为了在服务的{@link MessageHandle}或功能的{@link OnMessage}处理请求后发送响应。可以自定义此功能以实现不同类型服务的分阶段启动。

    int32 SAMGR_SendResponseByIdentity(const Identity *id, const Request *request, const Response *response);
     //id表示指向服务或功能id的指针,响应被发送到服务或功能的线程进行处理。
     //request表示指向原始请求的指针。
     //response表示指向响应内容的指针。
    

    如果成功发送响应,则返回EC_SUCCESS;如果响应未能发送,则返回其他错误代码。

    • 此函数只能在MessageHandleOnMessage中调用
    • 请求必须是从MessageHandleOnMessage传递的原始请求。否则,将发生内存异常
    • 调用方发送请求时,必须执行处理程序回调函数
    • 将响应发送到指定ID的消息队列进行处理。因此,在非阻塞模式下等待响应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值