サービスはロボットの状態と連動して動くものRobotics Studio活用術 はじめて作るサービス(3)(1/2 ページ)

Xbox 360のコントローラを用いて“通知”を発行し、ロボットの名前をダイアログに表示させるプログラムを作成します

» 2007年09月21日 00時00分 公開
[大川 善邦 工学博士 日本大学工学部非常勤講師/大阪大学名誉教授,@IT MONOist]

 連載第1回「サービス開発の基礎と流れ」で確認したように、サービスのテンプレートは、「Lookup」「Drop」「Get」の3個のメソッドを持っています(この中で、ユーザーに公開されたメソッドはGetのみで、LookupとDropはシステムが使用するメソッドなので、ユーザーは使用できません)。

 また、Visual Programming Language(以下、VPL)を使ってMyProjのダイヤグラムを組み、実行しましたがGetは応答しませんでした。つまり、“Getの応答がない”ことを確認しました(厳密にいえば、応答がなかったのではなくて、「“null”が返されたので確認できなかった」ということです)。

 Getメッセージのハンドラはテンプレートに組み込まれているので、Getから応答を得るために新たにハンドラを書く必要はありません。“ロボットの状態さえ定義すれば、Getの応答は得られる”のです。

 そこで今回は、ロボットの状態を定義して、実際にプログラムを実行するまでを解説します。

ロボットの状態

 それでは、Microsoft Visual C# 2005 Express SP1(以下、VC#)を起動して、連載第1回「サービス開発の基礎と流れ」を参考に新規にプロジェクトMyProj1を作成してください。

 [Solution Explorer]ペインで、ファイルMyProj1Types.csをダブルクリックして、画面1のように編集ペインを開きます。

MyProj1Types.cs 画面1 MyProj1Types.cs

 まずは、MyProj1Types.csのコードを見ていきましょう。

 コードの上段にサービスのコントラクト(public sealed class Contract)があります(サービスのコントラクトについては、連載第2回「身近な例から学ぶ“サービス”」を参考にしてください)。さらに、その下を見るとMyProj1Stateというクラス(public class MyProj1State)があります。これが、サービスMyProj1の状態を宣言する場所です。このクラスには[DataContract()]という属性が付いています。

※注:
C#の属性については、C#の記事を参照してください。ここでは、「このような属性を付けるものだ」として、説明は省略します。


 ここで、MyProj1Stateクラスに「名前」というプロパティを設定してみましょう。

※注:
通常、ロボットの状態としてどのようなプロパティを採用するかは“システム分析段階”で行われます。ここでは、ロボットのシステム分析はすでに終了しているものとします。


 MyProj1Types.csに対して、画面2のように“ロボットの名前”プロパティを定義します。

“ロボットの名前”プロパティを定義 画面2 “ロボットの名前”プロパティを定義

 まず、文字列変数_nameを定義して、これにAtomという値を代入します。

private string _name = "Atom"; 

 次に、[DataMember]という属性を付けてNameというプロパティを定義します。

 ここに記述されている「get」と「set」は、プロパティに対してデータをセットする、あるいはプロパティからデータを取り出すために必要となるステートメント(すなわち、式)です。

※注:
初めてサービスのプログラムを見た方は、メッセージの「Get」とプロパティの「get」を混同するかもしれません。これは、英文が同じ(頭文字が大文字か小文字の違いがあるだけ)なのでこのような混乱が起きますが、メッセージとプロパティはまったく異なるものなので明確に区別する必要があります。


 ここまでの手順で、MyProj1というサービスのMyProj1Stateという状態に対して、Nameというプロパティを定義し、これにAtomという文字列を代入できました。

状態のチェック

 前述までの作業で、VC#のテンプレートに対して書き込みを行ったので、その結果をチェックしてみましょう。

 連載第1回「サービス開発の基礎と流れ」を参考にして、プロジェクトMyProj1をビルドしてください。

 ビルドが成功したら、VPLを使ってビルドしたサービスの動作を確認します。

 まず、VPLを開いて[Basic Activities]から[Data]をドラッグし、[Services]から[MyProj1]をドラッグして、画面3のように両者を接続してください。

VPLのダイヤグラム 画面3 VPLのダイヤグラム

 ちなみに、サービスMyProj1で公開されているメソッドはGetだけなので、接続の際に[Connections]ダイアログは開かず、画面3のようにGetが自動的に選択されます。

 次に、[Services]から[Simple Dialog]をドラッグして、[MyProj1]と接続してください。

 すると、[Connections]ダイアログが開くので、画面4のように[From]ペインで[Get - Success]を選択し、[To]ペインで[AlertDialog]を選択して、[OK]ボタンをクリックしてください。

[Connections]ダイアログ 画面4 [Connections]ダイアログ

 続いて、[Data Connections]ダイアログが開くので、画面5のように、[Value]ペインで[Name]を選択し、[Target]ペインで[AlertText]を選択して、[OK]ボタンをクリックしてください。

[Data Connections]ダイアログ 画面5 [Data Connections]ダイアログ
※注:
[OK]ボタンをクリックした際に、[Data Connections]のダイアログが開かない場合は、画面6のようにVC#の画面で[Properties]ウィンドウを開き、[Data Connections]ダイアログの[Value]を[Name]へ変更します。


プロパティウィンドウ 画面6 プロパティウィンドウ

 同様に、[MyProj1]と[Simple Dialog]とを接続する線を右クリックして、画面7のようにコンテキストメニューから[Data Connections]ダイアログを開くこともできます。

コンテキストメニュー 画面7 コンテキストメニュー

 いずれにしても、[Value]に対して[Name]を選択することが必要です。デフォルトでは、nullになっているのでこのままでは正しい結果を得ることはできません。

 以上で準備ができたので、アプリケーションを実行してみましょう。

 VPLのメニューから[Run]−[Start]をクリックします(ツールバーの三角形のアイコンをクリックしても同じ結果が得られます)。

 すると、画面8のように[Run]ダイアログが表示されます。

[Run]ダイアログ 画面8 [Run]ダイアログ

 そして、しばらくすると画面9のダイアログが表示されます。ダイアログのテキストが“Atom”になっていることが確認できます。

Nameの表示 画面9 Nameの表示
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.