機能 #3411
完了⑫ 名前ベースのコンポーネント指定方法の実装
100%
説明
マネージャのマスタースレーブ機能として、ホスト名・コンポーネント名の指定でコンポーネントのオブジェクトリファレンスを取得する仕組みを実装する。これを、ネームサービス操作関数セットに取り込むこと。例えば、
rtns:openrtm.org::/category/component
という形式でコンポーネントにアクセスできるようにする。コンポーネントのポート番号は通常わからないが、まずマスターマネージャに問い合わせることでマネージャが把握しているスレーブのRTCのリファレンスを返すことでこの機能を実現する。
ファイル
n-ando さんがほぼ9年前に更新
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のリファレンスを取得する。
miyamoto さんがほぼ9年前に更新
- ファイル test_Manager_Servant_new.py test_Manager_Servant_new.py を追加
- 進捗率 を 0 から 30 に変更
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 さんがほぼ9年前に更新
- 進捗率 を 30 から 50 に変更
ホスト名を*とした場合に、プロセス内で起動したマネージャからマスターマネージャを取得する機能を追加した。
プロセス内で起動したマネージャをManger_Aとする。
- Manger_Aがマスターマネージャの場合には、Manger_Aを設定する。
- Manger_Aがスレーブマネージャの場合には、Manger_Aに登録されているマスターマネージャを設定する。
- Manger_Aに登録されているマスターマネージャが存在しない場合もManger_Aを設定する。
具体的には以下のように記述する。
rtcloc://*/example/TestComp20