如何使用openDDS传递任何对象



我使用的是openDDS pub/sun中间件。我已经使用复杂的结构测试了openDDS。

例如

typedef struct DSMD
    {
          string a;           
          long b;
    } StandByModeData;
   struct DSMCD{        
    string SessionId;       
    DSMD Data;
  };

但现在我有了不同的结构。它通过了openDDS。

如何在idl结构中使用模板?

我需要这样的东西。

template <struct T> 
struct array { 
  T typr;
};

这是OpenDDS目前无法实现的。IDL3+确实定义了模板化模块,这与您的示例类似,但据我所知,OpenDDS或任何其他DDS供应商都不支持。

eProsima的快速RTPS可以使用DDS(也称为动态类型生成器)支持各种数据类型,一些示例动态生成器可以参考此处,github repo可以参考https://github.com/eProsima/Fast-RTPS。IMHO,当数据类型支持std::string类型时,它可以支持任何类型的数据类型,因为std::字符串是一个通用的选择。对于不确定的数据类型,可以将数据强制转换为json格式的字符串以通过DDS。我一直在做这样的事情,稍后会在这里转发进一步的进展。

您可以创建自己的VMF(可变消息格式)消息类型。我现在正在编写的代码使用这个概念,使用eprosima FastDDS在节点/参与者之间传递消息。OpenDDS和FastDDS可以使用相同的idl文件。在某些情况下,我们同时使用这两种DDS实现。

@topic
struct VariableMessageType
{
   /* Message id */
   long msg_id; 
   /* Number of bytes in the data vector */
   /* units: none */
   long num_bytes; 
   /* num_bytes sized array of bytes */
   /* units: none */
   sequence<octet> data; 
};

相关内容

  • 没有找到相关文章