Tutorial?
前回のサンプルでは サービスプロバイダからコントローラへメッセージを送信しました。 ここではコントローラからサービスプロバイダへメッセージを送信し、サービスプロバイダが返事をするサンプルを紹介します。
まずサーバ側でコントローラを作成します。
ServiceTest.cpp
関数connectToServiceでサービスプロバイダ"MyService"に接続します。 これによりSIGVerseサーバを介さずにコントローラとサービスプロバイダで直接データの送受信を行うことができるようになります。
サービスプロバイダとの接続が完了するとonActionで"MyService"に定期的にメッセージを送信します。
ロボットだけが登場する世界ファイルを作成します。
ServiceTest.xml
次にサービスプロバイダのサンプルです。 クライアント側で前回(メッセージ送信ツールの作成?)と同じようにVC++2008で新しくプロジェクトを作成し、コードを以下のようにします。
MyService.cpp
サーバ接続時の"hostname"と<portnum>は自分の環境に合わせて置き換えてください。
このサービスプロバイダは常にコントローラからのメッセージを受け付けます。 そしてコントローラから"Hello"というメッセージが届くと"Hello! this is MyService"というメッセージをコントローラに返します。
sendMsgToCtrという関数を使うことによりSIGVerseサーバを介さずに直接コントローラにメッセージを送信することができます。
まずSIGVerseサーバを起動します。
$ sigserver.sh -p 9001 -w ./ServiceTest.xml
次にビューワーでシグバースサーバに接続します。接続が完了したら"START"ボタンを押す前にサービスプロバイダを起動します。
サーバ側で
[SYS] Service: "MyService" is available
と表示されればサービスプロバイダ立ち上げ成功です。
次に"START"ボタンを押してシミュレーションを開始します。
サーバ側で一秒に一回
[MSG] Robot-nii(0.0.0.0) [MyService] Hello! this is MyService
と表示されれば成功です。