我正在使用 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;
};
};
我的理解是,因为数据键是唯一的,所以这是一个正在写入的主题的新实例,并且使用相同的数据键写入的任何进一步的 msgs 都会发送到该主题的这个特定实例。我的发送代码如下:
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);
非常感谢任何帮助。