< 前へ | 次へ >

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

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

このレッスンでは、MyPublisher::publishMyDataWriter を使用してデータを MyTopic に公開します。 データを公開するには、MyTopicStruct のインスタンスを初期化して、その属性を完成させる必要があります。構造体の初期化に関連し、値をそれに追加するコードは、標準 DDS API コードではありません。 使用している DDS 実装 (RTI または OpenSplice) に固有のものです。 コードは、DDSMyTopicStructLib.idl ファイルから生成されたコードに基づいたものにします。

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

  1. 以下の手順で MyPublisher パブリッシャーに publishData 操作を追加します。
    1. 「MyPublisher」を右クリックして、「新規追加」 > 「操作」と選択します。
    2. 操作の「フィーチャー」ウィンドウを開き、操作を publishData と命名します。
  2. 「実装」タブで、以下のコードを入力し、「OK」をクリックします。
    char buff[32];
    for (int i = 1; i <= 10; ++i)
    {
    	OMDelay(1000);
    	MyTopicStruct myTopicStruct;
    #ifndef USE_OSPL_IMPLEMENTATION
    	MyTopicStruct_initialize(&myTopicStruct;);
    #endif
    	myTopicStruct.myKeyAttribute = i;
    	myTopicStruct.myLongAttribute = i;
    	myTopicStruct.myBooleanAttribute = (i % 2);
    	myTopicStruct.myDoubleAttribute = 1./i;
    	
    	//Initializing myStringAttribute
    	sprintf(buff, "message number %d", i);
    #ifdef USE_OSPL_IMPLEMENTATION
        myTopicStruct.myStringAttribute = DDS::string_dup(buff);
    #else //RTI
    	unsigned int buffLength = strlen(buff);
        if (!RTICdrType_copyString(myTopicStruct.myStringAttribute, buff, buffLength + 1)) 
        {
            return;
        }
    #endif
    
     	//Initializing myLongSequence
    #ifdef USE_OSPL_IMPLEMENTATION
     	myTopicStruct.myLongSequenceAttribute.length(3); 	
    	myTopicStruct.myLongSequenceAttribute[0] = i;
    	myTopicStruct.myLongSequenceAttribute[1] = i+1;
    	myTopicStruct.myLongSequenceAttribute[2] = i+2;
    #else //RTI
     	const signed int ar[3] = {i, i+1, i+2};
     	if (!myTopicStruct.myLongSequenceAttribute.from_array(ar, 3))
     	{
     		 return;
     	}
    #endif	
    	
    	//publish myTopicStruct
    	publishMyDataWriter(myTopicStruct);
    #ifndef USE_OSPL_IMPLEMENTATION
    	MyTopicStruct_finalize(&myTopicStruct;);
    #endif
    }

    データによる 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 の定義に関する何かのリサーチを行った後でディスカバーされました。RTI DDS 実装を使用している場合は、 DDSMyTopicStructLib.cxx ファイル内の MyTopicStruct_copy 関数を表示することで、myStringAttribute 属性の初期化のためにこのサンプル・コードで使用する RTICdrType_copyString 関数に対する呼び出しを確認できます。

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

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

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

フィードバック