プロジェクト

全般

プロフィール

機能 #3411

完了

⑫ 名前ベースのコンポーネント指定方法の実装

n-ando さんが8年以上前に追加. ほぼ7年前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
開始日:
2015/12/22
期日:
2016/03/25
進捗率:

100%

予定工数:
30.00時間

説明

マネージャのマスタースレーブ機能として、ホスト名・コンポーネント名の指定でコンポーネントのオブジェクトリファレンスを取得する仕組みを実装する。これを、ネームサービス操作関数セットに取り込むこと。例えば、
rtns:openrtm.org::/category/component
という形式でコンポーネントにアクセスできるようにする。コンポーネントのポート番号は通常わからないが、まずマスターマネージャに問い合わせることでマネージャが把握しているスレーブのRTCのリファレンスを返すことでこの機能を実現する。


ファイル

test_Manager_Servant_new.py (3.81 KB) test_Manager_Servant_new.py miyamoto, 2016/02/25 06:20

miyamoto さんが8年以上前に更新

  • 期日2016/03/25 にセット
  • 担当者miyamoto にセット
  • 対象バージョンRELEASE_1_2_0 にセット
  • 予定工数30.00時間 にセット

n-ando さんが8年以上前に更新

IDL Manager.idl に以下のオペレーションを追加

interface Manager
{
  RTCList get_components_by_name(string name)
};

指定方法

  • rtcloc://hostname[:port]/[category]/RTCname

ex. rtcloc://openrtm.org/example/ConsoleIn
rtcloc://openrtm.org/*/ConsoleIn
rtcloc://openrtm.org:2809/*/ConsoleIn

            master managerのポート番号

URI 指定で "rtcloc://" を見つけたら、当該ホストのマネージャにアクセスして該当するRTCのリファレンスを取得する。

n-ando さんが8年以上前に更新

  • NamingManagerに登録する CorbaOnNamingに代わり、その他のスキームの名前解決クラスを実装し追加する。
  • NamingMamagerには、名前からオブジェクトリファレンスを取得する関数を追加する。

miyamoto さんが8年以上前に更新

Manager.idlにget_components_by_nameを追加した。
これに伴い、ManagerServantクラスにget_components_by_name関数を追加した。

get_components_by_name関数では、指定したカテゴリ名、インスタンス名のRTCを検索してオブジェクトリファレンスのリストを返す。

以下の形式で名前が指定可能

カテゴリ名/インスタンス名
*/インスタンス名
インスタンス名

また名前解決クラスとしてNamingOnManagerクラスを実装した。
NamingOnManagerクラスはNamingBaseクラスを継承している。
NamingOnManagerクラスにはrtcloc形式の名前からRTCのオブジェクトリファレンスを取得するstring_to_component関数を実装している。

NamingOnManagerクラスのstring_to_component関数では、指定したホストのマネージャのオブジェクトリファレンスをcorbaloc形式で取得し、取得したマネージャ及びスレーブマネージャからget_components_by_name関数でRTCのオブジェクトリファレンスを取得している。

NamingManagerクラスにstring_to_component関数を実装した。
NamingManagerクラスのstring_to_component関数では、登録されたNamingOnManagerオブジェクトのstring_to_component関数を呼び出して名前からRTCのオブジェクトリファレンスを取得する。

また以下のコードでテストを行った。

rtc = self.manager._namingManager.string_to_component("rtcloc://localhost:2810/example/TestComp20")
name = rtc[0].get_component_profile().instance_name
self.assertEqual(name,"TestComp20")

miyamoto さんが8年以上前に更新

  • 進捗率30 から 50 に変更

ホスト名を*とした場合に、プロセス内で起動したマネージャからマスターマネージャを取得する機能を追加した。

プロセス内で起動したマネージャをManger_Aとする。

  • Manger_Aがマスターマネージャの場合には、Manger_Aを設定する。
  • Manger_Aがスレーブマネージャの場合には、Manger_Aに登録されているマスターマネージャを設定する。
  • Manger_Aに登録されているマスターマネージャが存在しない場合もManger_Aを設定する。

具体的には以下のように記述する。

rtcloc://*/example/TestComp20

miyamoto さんが8年以上前に更新

  • 進捗率50 から 100 に変更

n-ando さんがほぼ7年前に更新

  • ステータス新規 から 終了 に変更

他の形式にエクスポート: Atom PDF