1.Communication Status Types
每个状态类型都与特定的实体类型相关联。
1.1 Topic Status Types
INCONSISTENT_TOPIC状态表明尝试注册的主题已经存在,且具有不同的特征。
struct InconsistentTopicStatus {
long total_count; // 已报告为不一致的主题的累计计数
long total_count_change; // 自上次访问此状态以来不一致主题的增量计数
};
1.2 Subsctiber Status Types
DATA_ON_READERS状态指示在与订户关联的某些数据读取器上有新数据可用。收到此状态的应用程序可以在订阅服务器上调用get_datareaders()以获取具有可用数据的数据读取器集。
1.3 Data Reader Status Types
1.3.1 Sample Rejected Status
SAMPLE_REJECTED状态表明数据读取器接收到的样本已被拒绝。
enum SampleRejectedStatusKind {
NOT_REJECTED, REJECTED_BY_INSTANCES_LIMIT, REJECTED_BY_SAMPLES_LIMIT, REJECTED_BY_SAMPLES_PER_INSTANCE_LIMIT
};
struct SampleRejectedStatus {
long total_count; // 已报告为拒绝的样本的累积计数
long total_count_change; // 自上次访问此状态以来被拒绝的样本的增量计数
SampleRejectedStatusKind last_reason; // 最近拒绝的样本被拒绝的原因
InstanceHandle_t last_instance_handle; // 最后一个拒绝的样本的实例
};
1.3.2 Liveliness Changed Status
LIVELINESS_CHANGED状态表明正在为该数据读取器发布实例的一个或多个数据写入器的活泼性已发生更改。
struct LivelinessChangedStatus {
long alive_count; // 当前在此数据读取器正在读取的主题上处于活动状态的数据写入器的总数
long not_alive_count; // 非活动状态的数据写入器的总数
long alive_count_change; // 自上次访问状态以来,活动计数的变化
long not_alive_count_change; // 自上次访问状态以来未激活计数的变化
InstanceHandle_t last_publication_handle; // 最后一个数据写入器的句柄,该数据写入器的活动性已更改
};
1.3.3 Requested Deadline Missed Status
REQUESTED_DEADLINE_MISSED状态指示特定实例不遵守通过截止日期QoS策略请求的截止日期。
struct RequestedDeadlineMissedStatus {
long total_count; // 已报告为拒绝的样本的累积计数
long total_count_change; // 自上次访问此状态以来被拒绝的样本的增量计数
InstanceHandle_t last_instance_handle; // 最后错过的最后期限的实例。
};
1.3.4 Requested Incompatible QoS Status
REQUESTED_INCOMPATIBLE_QOS状态指示所请求的一个或多个QoS策略值与所提供的不兼容。
struct QosPolicyCount {
QosPolicyId_t policy_id;
long count;
};
typedef sequence<QosPolicyCount> QosPolicyCountSeq;
struct RequestedIncompatibleQosStatus {
long total_count; // 报告具有不兼容QoS的数据写入器的累积次数
long total_count_change; // 自上次访问此状态以来不兼容数据写入器的增量计数。
QosPolicyId_t last_policy_id; // 在最后检测到的不兼容性中不兼容的QoS策略之一
QosPolicyCountSeq policies; // 每个QoS策略检测到的不兼容总数。
};
1.3.5 Data Available Statue
DATA_AVAILABLE状态指示样本在数据写入器上可用。 收到此状态的应用程序可以使用数据读取器上的各种读取和读取操作来检索数据。
1.3.6 Sample Lost Status
SAMPLE_LOST状态表明样本已丢失,并且数据读取器从未接收过。
struct SampleLostStatus {
long total_count; // 报告为丢失的样本的累计计数。
long total_count_change; // 自上次访问此状态以来丢失的样本的增量计数。
};
1.3.7 Subscription Matched Status
SUBSCRIPTION_MATCHED状态指示兼容的数据写入器已匹配,或者先前匹配的数据写入器已停止匹配。
struct SubscriptionMatchedStatus {
long total_count; // 与该数据读取器兼容的数据写入器的累积计数
long total_count_change; // 自上次访问此状态以来,总计数的增量更改
long current_count; // 当前与此数据读取器匹配的数据写入器的数量
long current_count_change; // 自上次访问此状态以来当前计数的变化
InstanceHandle_t last_publication_handle; // 最后匹配的数据写入器的句柄。
};
1.4 Data Writer Status Types
1.4.1 Liveliness Lost Status
LIVELINESS_LOST状态指示未遵守数据写入器通过其活动性QoS提交的活动性。 这意味着任何连接的数据读取器都将认为此数据写入器不再处于活动状态。
struct LivelinessLostStatus {
long total_count; // 一个活动的数据写入器未活动的累积次数
long total_count_change; // 自上次访问此状态以来,总计数的增量更改
};
1.4.2 Offered Deadline Missed Status
OFFERED_DEADLINE_MISSED状态指示一个或多个实例错过了数据编写者提供的截止日期。
struct OfferedDeadlineMissedStatus {
long total_count; // 实例错过最后期限的累积计数
long total_count_change; // 自上次访问此状态以来,总计数的增量更改
InstanceHandle_t last_instance_handle; // 错过了最后期限的最后一个实例
};
1.4.3 Offered Incompatible QoS Status
OFFERED_INCOMPATIBLE_QOS状态指示提供的QoS与数据读取器的请求QoS不兼容。
struct QosPolicyCount {
QosPolicyId_t policy_id;
long count;
};
typedef sequence<QosPolicyCount> QosPolicyCountSeq;
struct OfferedIncompatibleQosStatus {
long total_count; // 找到不兼容QoS的数据读取器的累积次数
long total_count_change; // 自上次访问此状态以来,totalcount的增量更改
QosPolicyId_t last_policy_id; // 在最后检测到的不兼容性中不兼容的QoS策略之一
QosPolicyCountSeq policies; // 每个QoS策略检测到的不兼容总数
};
1.4.4 Publication Matched Status
PUBLICATION_MATCHED状态指示兼容的数据读取器已匹配,或者先前匹配的数据读取器已不再匹配。
struct PublicationMatchedStatus {
long total_count; // 与该数据写入器兼容的数据读取器的累积计数
long total_count_change; // 自上次访问此状态以来,总计数的增量更改
long current_count; // 与此数据写入器匹配的当前数据读取器数
long current_count_change; // 自上次访问此状态以来当前计数的变化
InstanceHandle_t last_subscription_handle; // 最后匹配的数据读取器的句柄。
};
2.Listner
每个实体都可以根据其报告的状态定义自己的侦听器接口。 任何实体的侦听器接口也都继承自其拥有实体的侦听器,从而使其也可以处理拥有实体的状态。
每个状态操作都采用on_ <状态名称>(<实体>,<状态结构>)的一般形式,其中<状态名称>是所报告状态的名称,<实体>是对为其报告状态的实体的引用, <status_struct>是具有状态详细信息的结构。 读取状态忽略第二个参数。
例: void on_sample_lost(in DataReader the_reader, in SampleLostStatus status);
侦听器可以传递到用于创建其实体的工厂函数,也可以在创建实体后通过在实体上调用set_listener()进行显式设置。 这两个功能都将状态掩码作为参数。 掩码指示在该侦听器中启用了哪些状态。 每个状态的掩码位值在DdsDcpsInfrastructure.idl中定义:
提供6个Listner:Topic Listner,Data Writer Listner, Publisher Listner,
Data Reader Listner, Subscriber Listner, Domian Participant Listner
3.Condition
3.1 Status Condition
每个实体都有一个与之关联的状态条件对象,以及一个使应用程序访问状态条件的get_statuscondition()操作。 每个条件都有一组可以触发该条件的启用状态。 将一个或多个条件附加到一个等待集中,使应用程序开发人员可以等待条件的状态集。 一旦触发了启用状态,等待调用就会从等待集中返回,开发人员可以查询实体上的相关状态条件。 查询状态条件将重置状态。
3.2 Read Condition
使用数据读取器和传递给读取和获取操作的相同掩码创建读取条件。 等待此条件时,只要采样与指定的掩码匹配,就会触发该条件。 然后可以使用将读取条件作为参数的read_w_condition()和take_w_condition()操作来检索这些样本。
3.3 Query Condition
查询条件是读取条件的一种特殊形式,它是由有限形式的类似SQL的查询创建的。 这允许应用程序过滤触发条件的数据样本,然后使用常规读取条件机制进行读取。
3.4 Guard Condition
保护条件是一个简单的接口,允许应用程序创建自己的条件对象,并在发生应用程序事件(OpenDDS外部)时触发它。