Project

General

Profile

Actions

機能 #3411

closed

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

Added by n-ando about 9 years ago. Updated over 7 years ago.

Status:
終了
Priority:
通常
Assignee:
Start date:
12/22/2015
Due date:
03/25/2016
% Done:

100%

Estimated time:
30.00 h

Description

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


Files

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

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
Actions #2

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のリファレンスを取得する。

Actions #3

Updated by n-ando almost 9 years ago

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

Updated by miyamoto almost 9 years ago

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")

Actions #5

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

Actions #6

Updated by miyamoto almost 9 years ago

  • % Done changed from 50 to 100
Actions #7

Updated by n-ando over 7 years ago

  • Status changed from 新規 to 終了
Actions

Also available in: Atom PDF