为订阅者在opends中进行动态内容过滤

Dynamic content filtering in opendds for subscriber?

本文关键字:动态 过滤 opends      更新时间:2023-10-16

我正在为以数据为中心的发布-订阅模型使用openDDS。Publisher正在持续发送数据,订阅者将接收数据。但对于订阅者,它必须根据我给出的条件接收过滤后的数据。

假设发布者和订阅者使用的主题结构是:

module Messenger {
#pragma DCPS_DATA_TYPE "Messenger::ChannelData"
#pragma DCPS_DATA_KEY "Messenger::ChannelData subject_id"
  struct ChannelData {
            string from;
            string subject;
            long subject_id;
            string text;
            long   count;
  };
};

OpenDDS有一个名为内容过滤主题的概念。和我用过的一样。

代码:

  // Register Type (Messenger::Message)
    Messenger::ChannelDataTypeSupport_var ts =
      new Messenger::ChannelDataTypeSupportImpl();
    if (ts->register_type(participant.in(), "") != DDS::RETCODE_OK) {
      ACE_ERROR_RETURN((LM_ERROR,
                        ACE_TEXT("%N:%l main()")
                        ACE_TEXT(" ERROR: register_type() failed!n")), -1);
    }
    // Create Topic (Movie Discussion List)
    CORBA::String_var type_name = ts->get_type_name();
    DDS::Topic_var topic =
      participant->create_topic("Movie Discussion List",
                                type_name.in(),
                                TOPIC_QOS_DEFAULT,
                                DDS::TopicListener::_nil(),
                                OpenDDS::DCPS::DEFAULT_STATUS_MASK);
 DDS::ContentFilteredTopic_var cft =
         participant->create_contentfilteredtopic("MyTopic-Filtered",
         topic,
         "count <= 0 ",DDS::StringSeq());

但在上面的代码中,我有硬编码的过滤条件count<0

那么,有没有办法为用户接收过滤后的数据提供动态过滤条件呢?

不是0,而是传递%0和DDS::StringSeq(),传递一个长度为1的序列,该序列包含应用于%0的值。在谷歌上快速搜索会给你几个例子!