忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[328]  [327]  [325]  [324]  [323]  [322]  [321]  [320]  [319]  [318]  [317
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

omniORB単体だとやたら面倒くさい.

正直な所,OpenRTM-aistを使うだけなら別にソースなんか読まなくても良いような気がする.

でもこの前の卒論発表で,「OpenCVのライブラリをそのまま使っているので,どんなアルゴリズムかは知りません」とか平気な顔で言う人を見たので,読んだ方が良いような気もするんだよなぁ.

まあ,OpenCVはちょっと探せば情報はすぐに出てくるから別に読まなくても良いんだけど.

ちなみに僕は画像処理に興味がないのでOpenCVのアルゴリズムなんか知りません.




それはさておき,今回はネームサーバーを使ってクライアントとサーバーを分けます.

今回のサンプルはここからダウンロード出来ます.

・・・・とは言っても,omniORBのサンプルとほぼ同じですが.


では,クライアントから見ていきます.


TestCORBAclientのTestCORBAcliant.cppを見てください.


  //ネームサーバーよりオブジェクトリファレンスを取得
    CORBA::Object_var obj = getObjectReference(orb);

    //サーバントのオブジェクトリファレンス取得
    Example::Echo_var echoref = Example::Echo::_narrow(obj);

    //サーバーに処理を要求
    for (CORBA::ULong count=0; count < 10; count++)
      hello(echoref);



重要なのはgetObjectReferenceなので,そちらを見ます.

   
    //ネーミングサービスの参照を取得
    obj = orb->resolve_initial_references("NameService");
    rootContext = CosNaming::NamingContext::_narrow(obj);

・・・

  //test.mycontext/Echo.Objectに名前を設定
  CosNaming::Name name;
  name.length(2);

  name[0].id   = (const char*) "test";       // string copied
  name[0].kind = (const char*) "my_context"; // string copied
  name[1].id   = (const char*) "Echo";
  name[1].kind = (const char*) "Object";

・・・

    //指定した名前のオブジェクトリファレンスを返す
    return rootContext->resolve(name);



重要なのはこんなところかな.


例の如く,example_echo.idlからomniidl -bcxx -Wba -nf example_echo.idlとコマンドを打ってファイル生成してください.


次はサーバーです.

TestCORBAserverのTestCORBAserver.cppを見てください.


main文では

    //ネームサーバーにオブジェクトを登録

    if( !bindObjectToName(orb, obj) )
        return 1;

・・・

    //サーバアプリケーションの終了待機
    orb->run();




重要なのはこれだけ.
あとはと同じ.



bindObjectToNameでは,


    //test.my_contextの下に登録するため,ネーミングコンテキストの名前設定
    CosNaming::Name contextName;
    contextName.length(1);
    contextName[0].id   = (const char*) "test";
    contextName[0].kind = (const char*) "my_context";

・・・

  //ネーミングコンテキストの作成
      testContext = rootContext->bind_new_context(contextName);

・・・

    //Echo.Objectという名前を設定
    CosNaming::Name objectName;
    objectName.length(1);
    objectName[0].id   = (const char*) "Echo";
    objectName[0].kind = (const char*) "Object";

・・・

//オブジェクトを登録
      testContext->bind(objectName, objref);


みたいな感じ.


最後に動作確認してみます.

ネームサーバーを起ち上げるのは


omniNames -start -logdir tmp


とコマンド入力します.

この際,tmpのフォルダの中のファイルは削除してないと実行できないみたいですね.


続いて,サーバーを起ち上げます.

コマンドから


TestCORBAserver -ORBInitRef NameService=corbaloc:iiop:1.0@localhost:2809/NameService


とネームサーバーのポート番号を指定して起ち上げます.


クライアントも同様に


TestCORBAclient -ORBInitRef NameService=corbaloc:iiop:1.0@localhost:2809/NameService


とします.

すると,クライアントでサーバーのechoStringから"hello"と返されて,サーバーでも今回は受け取った文字列を表示するようにしたので表示されるはずです.




これで完了です.

・・・・うん,面倒くさい.

次回は他のPCでサーバーを起ち上げて通信させます.

後,普通のソケット通信との比較でもやってみようと思います.

少し比べる次元がおかしいような気もしますが.






にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
36
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]