Динамическая фильтрация контента в opendds для подписчика?

Я использую 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 .

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

-1

Решение

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

0

Другие решения


По вопросам рекламы [email protected]