DDS C ++ - 数据分发服务

时间:2017-08-01 16:06:47

标签: c++ communication publish-subscribe data-distribution-service opensplice

我开始使用C#而我正在尝试测试dds应用程序的后续代码。我是从http://www.laas.fr/files/SLides-A_Corsaro.pdf

取的
using System;
/**********************************************************
 * Definition for the TempSensorType
 **********************************************************/
enum TemperatureScale{
    CELSIUS,
    KELVIN,
    FAHRENHEIT
};
struct TempSensorType{
    short id;
    float temp;
    float hum;
    TemperatureScale scale;
};
#pragma keylist TempSensor id

/**********************************************************
 * Main
 **********************************************************/
static public void Main(string[] args){

    dds::Topic<TempSensorType> tsTopic(TempSensorTopic);
    dds::DataWriter<TempSensorType> dw(tsTopic);
    dds::DataReader<TempSensorType> dr(tsTopic);
    dds::SampleInfoSeq info;

    TempSensorSeq data;
    TempSensorType ts;
    ts = new TempSensorType { 1, 25.0F, 65.0F, CELSIUS };
    dw.write(ts);
    ts = new TempSensorType { 2, 26.0F, 70.0F, CELSIUS };
    dw.write(ts);
    ts = new TempSensorType { 3, 27.0F, 75.0F, CELSIUS };
    dw.write(ts);
    sleep(10);
    while (true){
        dr.read(data, info);
        for (int i = 0; i < data.length(); ++i)
            std::cout << data[i] << std::endl;
        sleep(1);
    }
    Console.WriteLine("Bonjour");
}

我开始理解每段代码的目的。但我有疑虑 关于主要的4个第一行,以&#34; dds ::&#34;开头。我认为他们错了 - 我得到了#34;标识符预期&#34;。如果你能提供帮助,那将是非常感激的。

1 个答案:

答案 0 :(得分:1)

在我看来,它不是有效的DDS代码。您似乎错过了IDL定义(应该解释#pragma)和代码。

您必须首先在.idl文件中创建主题,然后构建id以创建您在程序中使用的类,然后使用程序库,并且一切都丢失了。

开始下载DDS实施,例如OpenDDSFast-RTPS。除此之外,您还可以从头开始查看this site中的OpenDDS部分。