このレッスンでは、データを MyTopic トピック要素に公開できるように、一部のコードを追加します。
このレッスンでは、MyPublisher::publishMyDataWriter を使用してデータを MyTopic に公開します。
データを公開するには、MyTopicStruct のインスタンスを初期化して、その属性を完成させる必要があります。構造体の初期化に関連し、値をそれに追加するコードは、標準 DDS API コードではありません。
これは、このチュートリアルのソフトウェア要件である RTI Data Distribution Service 4.4d または 4.5d に固有なものです。コードは、DDSMyTopicStructLib.idl ファイルから生成されたコードに基づいたものにします。
データをトピックに公開できるようにコードを追加するには、以下のようにします。
- 以下の手順で MyPublisher パブリッシャーに publishData 操作を追加します。
- 「MyPublisher」を右クリックして、と選択します。
- 操作の「フィーチャー」ウィンドウを開き、操作を publishData と命名します。
- 「実装」タブで、以下のコードを入力し、「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 関数に対する呼び出しが確認できます。
- Sleep と呼ばれる Win32 API 関数を使用するには、MyPublisher パブリッシャーの「フィーチャー」ウィンドウを開きます。「プロパティー」タブで、CPP_CG::Class::ImpIncludes プロパティーを <windows.h> に設定し、「OK」をクリックします。
- publishData 操作を MyPublisher パブリッシャーに追加した後で、以下の手順でそれを呼び出すコードを入力します。
- MyPublishingApplication ドメイン参加者の下で DefaultConfig 構成の「フィーチャー」ウィンドウを開きます。
- 「初期設定」タブの「初期設定コード」フィールドで、以下のコードを追加します。
p_MyPublisher->publishData();
- 「OK」をクリックします。
- MyPublishingApplication ドメイン参加者のコードを生成し、それをビルドします。
- コードを生成するには、とクリックします。再ロードするかどうかを尋ねられたら、「はい」をクリックします。
- アプリケーションをビルドするには、と選択します。