< 前へ | 次へ >

レッスン 8: データをトピックに公開するためのコードを追加する

このレッスンでは、データを MyTopic トピック要素に公開できるように、一部のコードを追加します。

このレッスンでは、MyPublisher::publishMyDataWriter を使用してデータを MyTopic に公開します。 データを公開するには、MyTopicStruct のインスタンスを初期化して、その属性を完成させる必要があります。構造体の初期化に関連し、値をそれに追加するコードは、標準 DDS API コードではありません。 これは、このチュートリアルのソフトウェア要件である RTI Data Distribution Service 4.4d または 4.5d に固有なものです。コードは、DDSMyTopicStructLib.idl ファイルから生成されたコードに基づいたものにします。

データをトピックに公開できるようにコードを追加するには、以下のようにします。

  1. 以下の手順で MyPublisher パブリッシャーに publishData 操作を追加します。
    1. 「MyPublisher」を右クリックして、「新規追加」 > 「操作」と選択します。
    2. 操作の「フィーチャー」ウィンドウを開き、操作を publishData と命名します。
  2. 「実装」タブで、以下のコードを入力し、「OK」をクリックします。
    注: このチュートリアル・トピックに合わせるために、以下のコード・サンプルでは、if (!RTICdrType_ 行の終わりで使用された円記号 (¥) は、コードの次のセグメントが if (!RTICdrType_ 行の一部であることを示します。
    char buff[32];
    for (int i = 1; i <= 10; ++i)
    {
        Sleep(1000);
        MyTopicStruct myTopicStruct;
        MyTopicStruct_initialize(&myTopicStruct);
        myTopicStruct.myKeyAttribute = i;
        myTopicStruct.myLongAttribute = i;
        myTopicStruct.myBooleanAttribute = (i % 2);
        myTopicStruct.myDoubleAttribute = 1./i;
        //Initializing myStringAttribute
        sprintf(buff, "message number %d", i);
        unsigned int length = strlen(buff);
        if (!RTICdrType_copyString(myTopicStruct.myStringAttribute, buff, ¥
            length + 1))
        {
            return;
        }
        //Initializing myLongSequence
        const signed int ar[3] = {i, i+1, i+2};
        if (!myTopicStruct.myLongSequenceAttribute.from_array(ar, 3))
        {
            return;
        }
        //publish myTopicStruct
        publishMyDataWriter(myTopicStruct);
        MyTopicStruct_finalize(&myTopicStruct);
    }

    データによる MyTopicStruct の初期化方法を理解するために、MyTopicStructLib ドメイン参加者フォルダーの下の DefaultConfig フォルダー (例えば、<Rational® Rhapsody® インストール・フォルダー>¥DDSProject3¥MyTopicStructLib¥DefaultConfig) で、DDSMyTopicStructLib.cxx ファイルおよび DDSMyTopicStructLib.h ファイルをいずれかのテキスト・エディターで開きます。これらのファイルは、MyTopicStructLib のビルド・プロセスで DDSMyTopicStructLib.idl ファイルから生成されたものです。DDSMyTopicStructLib.h ファイルを検討すると、MyTopicStruct のインスタンスの初期化と最終処理のためにサンプル・コードで使用する MyTopicStruct_initialize および MyTopicStruct_finalize 関数を確認できます。配列から myLongSequenceAttribute を初期化する from_array 関数は、DDSMyTopicStructLib.h ファイル内のタイプ myLongSequenceAttribute である DDS_LongSeq の定義に関する何かのリサーチを行った後でディスカバーされました。DDSMyTopicStructLib.cxx ファイル内の MyTopicStruct_copy 関数を表示すると、myStringAttribute 属性の初期化のためにこのサンプル・コードで使用した RTICdrType_copyString 関数に対する呼び出しが確認できます。

  3. Sleep と呼ばれる Win32 API 関数を使用するには、MyPublisher パブリッシャーの「フィーチャー」ウィンドウを開きます。「プロパティー」タブで、CPP_CG::Class::ImpIncludes プロパティーを <windows.h> に設定し、「OK」をクリックします。
  4. publishData 操作を MyPublisher パブリッシャーに追加した後で、以下の手順でそれを呼び出すコードを入力します。
    1. MyPublishingApplication ドメイン参加者の下で DefaultConfig 構成の「フィーチャー」ウィンドウを開きます。
    2. 「初期設定」タブの「初期設定コード」フィールドで、以下のコードを追加します。
      p_MyPublisher->publishData();
    3. 「OK」をクリックします。
  5. MyPublishingApplication ドメイン参加者のコードを生成し、それをビルドします。
    • コードを生成するには、「コード」 > 「生成」 > 「DefaultConfig」とクリックします。再ロードするかどうかを尋ねられたら、「はい」をクリックします。
    • アプリケーションをビルドするには、「コード」 > 「ビルド」 > 「BuildMyPublishingApplication.exe」と選択します。

レッスンのチェックポイント

このレッスンでは、データを MyTopic トピック要素に公開するために、コードを追加する方法について学習しました。
次のレッスンでは、サブスクライバー・エンティティーおよび dataReader エンティティーを作成します。
< 前へ | 次へ >

フィードバック