2014-09-10 13 views
-1

Я использую openDDS для модели публикации подписки, ориентированной на данные. Издатель постоянно отправляет данные, а абонент получает его. Но в случае подписчика он должен получать отфильтрованные данные на основании условия, которое я дал.Динамическая фильтрация содержимого в списках подписчиков?

предположить мою тему структуру, используемую как издатель и абонентом:

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()); 

Но в коде выше я жёстко условие фильтра счетчик < = 0.

так, есть ли способ обеспечить условие динамического фильтра для подписчика для получения отфильтрованных данных?

ответ

0

Вместо 0 pass% 0 и вместо DDS :: StringSeq() передать последовательность длиной 1, которая содержит значение, которое должно использоваться для% 0. Быстрый поиск в google дал бы вам несколько примеров!