Up:[[Tutorial]] Previous:[[HMD+KINECT]] Next:[[メッセージ送受信]] ---- #contents *サービスプロバイダの作成 [#uc0b86f0] ※このサンプルはサーバv121029, ビューワーv2.0.1以降で正常に動作します。 ここではSIGVerse世界のエンティティにメッセージを送る簡単なサービスプロバイダを作成します。 サービスプロバイダを使用することによりクライアント側からサーバ側に様々なデータを提供することができるようになります。 開発ツールとしてVC++(2008または2010)を使用することを前提とします。 **ライブラリの取得 [#nac2be19] 以下のページからサービスライブラリSIGService_<version>.zipをダウンロードし、展開します。VC++2010を使用する場合はSIGService_<version>_vc2010.zipをダウンロードします。 -[[サービスライブラリ]] **プロジェクト新規作成 [#yd34b304] VC++2008(または2010)で新規プロジェクトを作成します。ファイル→新規作成→プロジェクト 新しいプロジェクトのダイアログが立ち上がるとWin32のWin32コンソールアプリケーションを選択し、プロジェクト名"MyService"と入力してOKボタンを押します。 //アプリケーションウィザードのウィンドウが立ち上がったら完了ボタンを押します。 アプリケーションウィザードのウィンドウが立ち上がったら次へをクリックし追加のオプションで空のプロジェクトにチェックを入れ、完了ボタンを押します。 //ws2_32.lib ** サービスサンプル[#b386d7e5] ソリューションエクスプローラのソースファイルを右クリックし、「追加」→「新しい項目」を選択しMyService.cppをソースファイルに追加します。 MyService.cpp #highlight(cpp){{ //#include "stdafx.h" #include "SIGService.h" int main(int argc, char** argv) { // サービス名を指定してサービスクラスのインスタンスを作成します sigverse::SIGService srv("MyService"); // サーバに接続します srv.connect("hostname", 9001); // エンティティ"man_000"にメッセージ"Hello"を送信します srv.sendMsg("man_000", "Hello"); // サーバから切断します srv.disconnect(); return 0; } }} connectの引数で指定するホスト名とポート番号はSIGVerseサーバのホスト名(またはipアドレス)とポート番号に置き換えます。 **ライブラリの設定 [#a9b796c7] SIGVerseサービスライブラリの設定を行います。 +ソリューションエクスプローラのプロジェクト名を右クリックし、参照を選択します。 「構成プロパティ」→「C/C++」→「全般」を選択し、「追加のインクルードディレクトリ」に展開したライブラリのincludeフォルダを指定します。&br; &br; +次に「構成プロパティ」→「リンカ」→「全般」を選択し、「追加のライブラリディレクトリ」に展開したライブラリのlibフォルダのDebugを指定します。 (ReleaseモードでコンパイルするときはReleaseを選択します。)&br; &br; +最後に同じ「リンカ」の「入力」を選択し「追加の依存ファイル」に"SIGService.lib"を追加します。 ビルドが正常に行えるか確認してみてください。 **実行 [#zc55d270] これで準備は整いました。 まずチュートリアルのサンプル[[人間型エージェントの操作]]の「コマンドによるエージェントの操作」をサーバ側で実行します。サーバ側でSIGVerseを起動するときには関数connectの第2引数で指定したポート番号を-pオプションで指定します。 サーバを起動したらビューワーからサーバに接続して"START"ボタンを押してシミュレーションを開始します。この状態でメッセージ送信プログラムを実行してみてください。エージェントがお辞儀したら成功です。 ビューワーからではなくMyServiceからメッセージ"Hello"を送信しました。 *プラグインの登録 [#b3215ae4] 次に作成したサービスをプラグインとしてビューワーに登録し、ビューワーから起動する方法を説明します。 サービスサンプルを以下のように修正します。 MyService.cpp #highlight(cpp){{ //#include "stdafx.h" #include "SIGService.h" int main(int argc, char** argv) { // サービス名を指定してサービスクラスのインスタンスを作成します sigverse::SIGService srv("MyService"); // メイン関数の引数からサーバのホスト名とポート番号を取得します std::string host = argv[1]; unsigned short port = (unsigned short)(atoi(argv[2])); // サーバに接続します srv.connect(host, port); // エンティティ"man_000"にメッセージ"Hello"を送信します srv.sendMsg("man_000", "Hello"); // サーバから切断します srv.disconnect(); return 0; } }} SIGVerseサービスではサーバのホスト名とポート番号がメイン関数の引数として与えられます。 **コンパイル [#l94e75d8] SIGViewerに読み込ませるようにするため、以下の設定をしてからビルドします。 -ソリューションエクスプローラのプロジェクト名を右クリックし、参照を選択します。「構成プロパティ」→「リンカ」→「出力ファイル」で拡張子を.exeから.sigに変更します。 exeファイルを先に作って後から拡張子を.sigに変更しても同じことです。 **ビューワーへ登録 [#v01acfa7] ビルドが成功してDebug(もしくはRelease)フォルダにMyService.sigができたら次はビューワーにサービスを登録します。 +まずビューワーを立ち上げます。&br; &br; +上にあるメニューバーから「Service」→「Add」を選択します。&br; &br; +サービスリストが立ち上がったら"Add"ボタンを押して作成したMyService.sigをサービスリストに追加します。 #ref(./MyService_1.PNG,80%) +"OK"ボタンを押します。 #highlight(end) **実行 [#qe5980a6] 先ほどと同様に[[人間型エージェントの操作]]の「コマンドによるエージェントの操作」をサーバ側で実行します。ビューワーからサーバに接続して"START"ボタンを押してシミュレーションを開始します。 人間が手を下した状態になったら、メニューバーの「Service」→「Start」をクリックし、MyService.sigを選択し、サービスを開始します。 エージェントがお辞儀をすれば成功です。 *Old version [#xc430bd6] [[メッセージ送信ツールの作成(v120330, v1.4.8)]] ---- Up:[[Tutorial]] Previous:[[HMD+KINECT]] Next:[[メッセージ送受信]]