Я использую OpenDDS v3.6 и пытаюсь отправить сообщение определенному одноранговому узлу DDS, одному из многих. В IDL структура сообщения выглядит следующим образом:
module Test
{
#pragma DCPS_DATA_TYPE "Test::MyMessage"
#pragma DCPS_DATA_KEY "Test::MyMessage dest_id"
struct MyMessage {
short dest_id;
string txt;
};
};
Насколько я понимаю, поскольку ключ данных уникален, это новый экземпляр темы, в который записывается, и любые дальнейшие сообщения, написанные с тем же ключом данных, отправляются в этот конкретный экземпляр темы. Мой код отправки выглядит следующим образом:
DDS::ReturnCode_t ret;
Test::MyMessage msg;
// populate msg
msg.dest_id = n;
DDS::InstanceHandle_t handle;
handle = msg_writer->register_instance(msg);
ret = msg_writer->write(msg, handle);
Итак, теперь мне нужно выяснить, как заставить принимающий одноранговый узел читать только из этого экземпляра темы и не получать все остальные сообщения, отправляемые другим одноранговым узлам. Я начал со следующего, но не уверен, как правильно выбрать конкретный экземпляр темы.
DDS::InstanceHandle_t instance;
status = msg_dr->take_next_instance(spec, si, 1, DDS::ANY_SAMPLE_STATE,
DDS::ANY_VIEW_STATE, DDS::ANY_INSTANCE_STATE);
Любая помощь высоко ценится.