機能 #3411
closed⑫ 名前ベースのコンポーネント指定方法の実装
100%
Description
マネージャのマスタースレーブ機能として、ホスト名・コンポーネント名の指定でコンポーネントのオブジェクトリファレンスを取得する仕組みを実装する。これを、ネームサービス操作関数セットに取り込むこと。例えば、
rtns:openrtm.org::/category/component
という形式でコンポーネントにアクセスできるようにする。コンポーネントのポート番号は通常わからないが、まずマスターマネージャに問い合わせることでマネージャが把握しているスレーブのRTCのリファレンスを返すことでこの機能を実現する。
Files
Updated by miyamoto about 9 years ago
- Due date set to 03/25/2016
- Assignee set to miyamoto
- Target version set to RELEASE_1_2_0
- Estimated time set to 30.00 h
Updated by n-ando almost 9 years ago
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のリファレンスを取得する。
Updated by n-ando almost 9 years ago
- NamingManagerに登録する CorbaOnNamingに代わり、その他のスキームの名前解決クラスを実装し追加する。
- NamingMamagerには、名前からオブジェクトリファレンスを取得する関数を追加する。
Updated by miyamoto almost 9 years ago
- File test_Manager_Servant_new.py test_Manager_Servant_new.py added
- % Done changed from 0 to 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")
Updated by miyamoto almost 9 years ago
- % Done changed from 30 to 50
ホスト名を*とした場合に、プロセス内で起動したマネージャからマスターマネージャを取得する機能を追加した。
プロセス内で起動したマネージャをManger_Aとする。
- Manger_Aがマスターマネージャの場合には、Manger_Aを設定する。
- Manger_Aがスレーブマネージャの場合には、Manger_Aに登録されているマスターマネージャを設定する。
- Manger_Aに登録されているマスターマネージャが存在しない場合もManger_Aを設定する。
具体的には以下のように記述する。
rtcloc://*/example/TestComp20