Използвам 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);
Всяка помощ е много ценена.