Up:Tutorial?     Previous:メッセージ送信ツールの作成?  

メッセージ送受信

前回のメッセージ送信(sendMsg)はサーバを介してコントローラにメッセージを送信しました。 サービスプロバイダはサーバを介さず直接コントローラへメッセージを送信することもできます。

コントローラサンプル

まずサーバ側でコントローラを作成します。

ServiceTest.cpp

関数connectToServiceでサービスプロバイダ"MyService"に接続します。 これによりSIGVerseサーバを介さずにコントローラとサービスプロバイダで直接データの送受信を行うことができるようになります。

サービスプロバイダとの接続が完了すると関数sendMsgToSrvでサービスプロバイダ"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

と表示されれば成功です。

Up:Tutorial?     Previous:メッセージ送信ツールの作成?  


Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2013-02-27 (Wed) 14:03:29 (4069d)