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

distributedschedule_samgr_lite/interfaces/kits/communication/braodcast/broadcast_interface.h

该模块下的文件主要为服务提供数据订阅和数据推送,使用此模块,服务、功能或其他模块可以广播事件或数据,且所有接收这些事件或数据的服务都可以接收这些广播。

该文件主要提供广播服务的外部接口和基本类型定义,这些接口和类型用于订阅和发布事件和数据。

//指示广播服务的名称。
#define BROADCAST_SERVICE "Broadcast" 
 //指示发布/订阅功能的名称。
#define PUB_SUB_FEATURE "Provider and subscriber"
//指示事件或数据的主题,用于区分不同类型的事件或数据。
typedef uint32 Topic;

该结构体主要定义了 //枚举广播服务特有的错误代码。

enum BroadcastErrCode {
    EC_ALREADY_SUBSCRIBED = EC_SUCCESS + 1  //显示已订阅主题的错误代码
};
typedef struct Consumer Consumer;

该结构体定义了用于接收事件和推送数据的主题使用者,在调用该接收事件或推送数据的功能时时需要为应用程序实现此结构。

struct Consumer {
	 const Identity *identity;   //消费者ID
	 void (*Notify)(Consumer *consumer, const Topic *topic, const Request *origin);
	 BOOL (*Equal)(const Consumer *current, const Consumer *other);
};
typedef struct Provider Provider;

该函数定义了使用者将如何处理已发布主题的事件或数据,可以为消费者实现此功能,以处理和他们相关联的主题。

void (*Notify)(Consumer *consumer, const Topic *topic, const Request *origin);
//consumer指示消费者的指针。
//topic指示指向要处理的主题的指针。
//origin指示指向要处理的数据的指针。

注意,传递的主题必须已由使用者订阅。否则,该函数将不执行任何操作。

该函数的作用是检查两个使用者是否相等,在进行相关功能时,需要实现此功能以防止重复订阅主题。

BOOL (*Equal)(const Consumer *current, const Consumer *other);
//current指示指向当前使用者的指针。
//other指示指向要比较的目标使用者的指针。

如果两个使用者相等,则返回TRUE;否则返回FALSE

该结构体的功能主要是定义主题的事件和数据的提供程序。

struct Provider {
	BOOL (*Publish)(IUnknown *iUnknown, const Topic *topic, uint8 *data, 	int16 len);
};
typedef struct Subscriber Subscriber;

该结构体下的函数的功能是发布指定主题的事件和数据,事件或数据由发布者发布,发送给订阅主题的所有使用者,并由使用者进行处理。

BOOL (*Publish)(IUnknown *iUnknown, const Topic *topic, uint8 *data, int16 len);
//iUnknown指示发布/订阅功能的外部接口
//topic指示指向要发布的主题的指针。
//data指示指向要发布的数据的指针。
//len指示要发布的数据的长度。长度必须与<b>数据长度相同。调用方必须确保此参数的有效性。

如果主题已成功发布,则返回TRUE;否则返回FALSE

该结构体定义外部接口的订阅服务器,以订阅主题的事件和数据。

struct Subscriber {
int (*AddTopic)(IUnknown *iUnknown, const Topic *topic);

int (*Subscribe)(IUnknown *iUnknown, const Topic *topic, Consumer *consumer);

Consumer *(*ModifyConsumer)(IUnknown *iUnknown, const Topic *topic, Consumer *old, Consumer *current);

Consumer *(*Unsubscribe)(IUnknown *iUnknown, const Topic *topic, const Consumer *consumer);
};
typedef struct PubSubInterface PubSubInterface;

该函数将指定的主题添加到广播服务,指定的主题由订阅服务器添加,那些主题只有在添加后才能订阅。

int (*AddTopic)(IUnknown *iUnknown, const Topic *topic);
//iUnknown指示发布/订阅功能的外部接口。
//topic指示要订阅的主题。

如果成功添加主题,则返回EC_SUCCESS;如果未能添加主题,则返回其他错误代码。

该函数的功能是为消费者订阅指定的主题,在订阅服务器上调用此函数,要订阅的主题必须已添加到广播服务中。

int (*Subscribe)(IUnknown *iUnknown, const Topic *topic, Consumer *consumer);
//iUnknown指示发布/订阅功能的外部接口。
//topic指示要订阅的主题。
//comsumer指示订阅主题的消费者。

如果订阅成功,则返回EC_SUCCESS;如果订阅失败,则返回其他错误代码。

该函数的功能是修改指定主题的使用者。

Consumer *(*ModifyConsumer)(IUnknown *iUnknown, const Topic *topic, Consumer *old, Consumer *current);
//iUnknown指示指向发布/订阅功能的外部接口的指针。
//topic指示指向将修改其使用者的主题的指针。
//old指示指向主题的原始使用者的指针。
//current指示指向主题的新使用者的指针。

如果修改成功,则返回原始使用者的指针 否则为空。

该函提供了取消订阅指定主题的功能,此函数用于取消指定主题和使用者之间的订阅关系。

Consumer *(*Unsubscribe)(IUnknown *iUnknown, const Topic *topic, const Consumer *consumer);
//iUnknown指示发布/订阅功能的外部接口。此参数用于获取订阅关系。
//topic指示指向要取消订阅的主题的指针。
//consumer指示指向使用者的指针。

如果取消订阅成功,则返回使用者的指针;否则返回空值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值