1. マネージャの使い方

マネージャにはマスタとスレーブがあります。

*マスタマネージャ：
　　原則1ノードにつき1つだけ存在する。
　　アプリケーション、ノードの外部などからは、マスターマネージャに対して
　　コンポーネントの生成を依頼する。
　　つまり、原則として、このマネージャ自身はコンポーネントを生成・管理しない。
　　実際のコンポーネントの生成は、マスタがスレーブマネージャに依頼する。

*スレーブマネージャ：
　　1ノードに複数存在できる。0個以上のマスターに所属することができる。
　　rtcdを-dなしで起動した場合、マスターがすでに起動していればその配下に入る。
　　コンポーネントはスレーブマネージャ上で生成・管理される。
　　原則、コンポーネントが存在しないスレーブマネージャは存在しない（自動でシャットダウンされる）。
　　マスターマネージャからは、スレーブはポート番号で区別される。
　　つまり、同一ポート番号のスレーブマネージャは、同一のプロセス（逆もしかり）である。

2. コンポーネント生成

コンポーネント生成の流れは、以下のようになります。

1) RTCが起動される可能性のあるノード上では、rtcd は -d オプション付きで起動されているものとします。
＃Linuxではれば、/etc/init.d 以下の起動スクリプトなどで起動されているイメージ。

2) 何らかのツール、コマンド、アプリケーションが、あるノードに対してコンポーネントを作成したい場合
　まず、そのノードのマスタマネージャのオブジェクトリファレンスを取得します。
　それは、ネームサーバからでもいいですし、corbaloc:iiop:hostname:2810/manager という URL を
  ORB::string_to_object() 関数を使ってダイレクトにアクセスしてもかまいません。

3) 何らかのツール、コマンド、アプリケーションが、あるノード上で、コンポーネントを起動する場合、
　そのノードのマスターマネージャに対して create_component() をコールします。
　mgr->create_component("ConsoleIn?manager=localhost:2811&instance_name=ConsoleIn1234")

4) manager=localhost:2811 はローカルホスト上の 2811番ポート上で ConsoleIn という
　コンポーネントを起動しなさい、という意味なので、マスターマネージャは、スレーブマネージャを
　2811ポート上で起動し、そのマネージャに対して、create_component("ConsoleIn?instance_name=ConsoleIn1234")
  をコールします。

5) スレーブマネージャは、ポート2811上で起動し、ConsoleInを一つ生成します。
　このとき、インスタンス名はConsoleIn1234 に指定されているのでインスタンス名はこの名前になり、
　ネームサーバ上に登録される名前も、この名前になります。

6) さらに、同じプロセス上で、ConsoleIn を起動したければ、
  mgr->create_component("ConsoleIn?manager=localhost:2811&instance_name=ConsoleIn1235")
 とをマスタマネージャに対してコールすればよく、異なるプロセスで起動したい場合は、
  mgr->create_component("ConsoleIn?manager=localhost:2812&instance_name=ConsoleIn1235")
 等とすれば、別のプロセス上でConsoleInが起動します。

7) なお、そのノード上で起動しているコンポーネントの参照は、マスターマネージャから、
  mgr->get_components() によって取得できます。
　スレーブ上で起動しているすべてのコンポーネントの参照をマスターが収集して返しています。


1.0-RELEASEのrtcdはこのような使い方を意図して実装されています。

Windows上で起動したrtcdに、RTSystemEditorのmanager viewからアクセスすると、
非常に重いのですが、これはDLLからRTCのプロファイルを取得する操作がWindows
上ではなぜだか非常に遅いために発生しています。
また、OpenCVをインストールしていない場合、RTCのプロファイルを取得する過程で、
USBcamera*コンポーネントをアクセスした段階で、DLLのエラーダイアログが出てしまい
アクセスがさらに遅くなってしまいます。
OpenCVをインストールするか、USBCameda*.DLLを削除するかすると改善します。


現在のところ各言語版のrtcd間の連携は十分ではなく、それぞれの
言語版のrtcdのマスターとスレーブが最低限の連携をするだけになっています。

