私は OpenDDS v3.6 を使用しており、多くのうちの 1 つである特定の 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);
どんな助けでも大歓迎です。