[openrtm-commit:02612] r828 - in trunk/OpenRTM-aist-Python/OpenRTM_aist: . RTM_IDL
openrtm @ openrtm.org
openrtm @ openrtm.org
2017年 5月 26日 (金) 12:26:14 JST
Author: miyamoto
Date: 2017-05-26 12:26:13 +0900 (Fri, 26 May 2017)
New Revision: 828
Modified:
trunk/OpenRTM-aist-Python/OpenRTM_aist/DefaultConfiguration.py
trunk/OpenRTM-aist-Python/OpenRTM_aist/Manager.py
trunk/OpenRTM-aist-Python/OpenRTM_aist/ManagerServant.py
trunk/OpenRTM-aist-Python/OpenRTM_aist/ModuleManager.py
trunk/OpenRTM-aist-Python/OpenRTM_aist/Process.py
trunk/OpenRTM-aist-Python/OpenRTM_aist/RTM_IDL/Manager.idl
Log:
[compat,bugfix,->RELENG_1_2]update Manager.idl
Modified: trunk/OpenRTM-aist-Python/OpenRTM_aist/DefaultConfiguration.py
===================================================================
--- trunk/OpenRTM-aist-Python/OpenRTM_aist/DefaultConfiguration.py 2017-05-08 01:32:34 UTC (rev 827)
+++ trunk/OpenRTM-aist-Python/OpenRTM_aist/DefaultConfiguration.py 2017-05-26 03:26:13 UTC (rev 828)
@@ -17,7 +17,16 @@
import OpenRTM_aist
+import platform
+
+if platform.system() == "Windows":
+ cpp_suffixes = "dll"
+elif platform.system() == "Linux":
+ cpp_suffixes = "so"
+else:
+ cpp_suffixes = "dylib"
+
##
# @if jp
# @brief Manager ÍÑ ¥Ç¥Õ¥©¥ë¥È¡¦¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó
@@ -85,4 +94,14 @@
"manager.local_service.enabled_services","ALL",
"sdo.service.provider.enabled_services", "ALL",
"sdo.service.consumer.enabled_services", "ALL",
+ "manager.supported_languages", "C++, Python, Java",
+ "manager.modules.C++.profile_cmd", "rtcprof",
+ "manager.modules.Python.profile_cmd", "rtcd_python",
+ "manager.modules.Java.profile_cmd", "rtcprof_java",
+ "manager.modules.C++.suffixes", cpp_suffixes,
+ "manager.modules.Python.suffixes", "py",
+ "manager.modules.Java.suffixes", "class",
+ "manager.modules.C++.load_paths", "./",
+ "manager.modules.Python.load_paths", "./",
+ "manager.modules.Java.load_paths", "./",
""]
Modified: trunk/OpenRTM-aist-Python/OpenRTM_aist/Manager.py
===================================================================
--- trunk/OpenRTM-aist-Python/OpenRTM_aist/Manager.py 2017-05-08 01:32:34 UTC (rev 827)
+++ trunk/OpenRTM-aist-Python/OpenRTM_aist/Manager.py 2017-05-26 03:26:13 UTC (rev 828)
@@ -168,6 +168,7 @@
self._listeners = OpenRTM_aist.ManagerActionListeners()
signal.signal(signal.SIGINT, handler)
self._rtcout = None
+ self._mgrservant = None
return
@@ -1465,8 +1466,9 @@
# @endif
def shutdownManagerServant(self):
self._rtcout.RTC_TRACE("Manager.shutdownManagerServant()")
- self._mgrservant.exit()
- self._mgrservant = None
+ if self._mgrservant:
+ self._mgrservant.exit()
+ self._mgrservant = None
return
##
Modified: trunk/OpenRTM-aist-Python/OpenRTM_aist/ManagerServant.py
===================================================================
--- trunk/OpenRTM-aist-Python/OpenRTM_aist/ManagerServant.py 2017-05-08 01:32:34 UTC (rev 827)
+++ trunk/OpenRTM-aist-Python/OpenRTM_aist/ManagerServant.py 2017-05-26 03:26:13 UTC (rev 828)
@@ -251,6 +251,18 @@
for i in range(len(prof)):
OpenRTM_aist.NVUtil.copyFromProperties(cprof[i].properties, prof[i])
+
+ if self._isMaster:
+ guard = OpenRTM_aist.ScopedLock(self._slaveMutex)
+ for slave in self._slaves[:]:
+ try:
+ profs = slave.get_loaded_modules()
+ cprof.extend(profs)
+ except:
+ self._rtcout.RTC_ERROR("Unknown exception cought.")
+ self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception())
+ self.remove_slave_manager(slave)
+
return cprof
@@ -282,6 +294,18 @@
for i in range(len(prof)):
OpenRTM_aist.NVUtil.copyFromProperties(cprof[i].properties, prof[i])
+
+ if self._isMaster:
+ guard = OpenRTM_aist.ScopedLock(self._slaveMutex)
+ for slave in self._slaves[:]:
+ try:
+ profs = slave.get_factory_profiles()
+ cprof.extend(profs)
+ except:
+ self._rtcout.RTC_ERROR("Unknown exception cought.")
+ self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception())
+ self.remove_slave_manager(slave)
+
return cprof
@@ -329,7 +353,7 @@
if self._isMaster:
guard = OpenRTM_aist.ScopedLock(self._slaveMutex)
- for slave in self._slaves:
+ for slave in self._slaves[:]:
try:
rtc = slave.create_component(module_name)
if not CORBA.is_nil(rtc):
@@ -337,6 +361,7 @@
except:
self._rtcout.RTC_ERROR("Unknown exception cought.")
self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception())
+ self.remove_slave_manager(slave)
del guard
module_name = module_name + "&manager_name=manager_%p"
@@ -423,18 +448,21 @@
# get slaves' component references
self._rtcout.RTC_DEBUG("%d slave managers exists.", len(self._slaves))
- for i in range(len(self._slaves)):
+ for slave in self._slaves[:]:
try:
- if not CORBA.is_nil(self._slaves[i]):
- srtcs = self._slaves[i].get_components()
+ if not CORBA.is_nil(slave):
+ srtcs = slave.get_components()
OpenRTM_aist.CORBA_SeqUtil.push_back_list(crtcs, srtcs)
except:
- self._rtcout.RTC_INFO("slave (%d) has disappeared.", i)
+ self._rtcout.RTC_ERROR("Unknown exception cought.")
+ self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception())
+ self.remove_slave_manager(slave)
+ #self._rtcout.RTC_INFO("slave (%d) has disappeared.", i)
#self._slaves[i] = RTM.Manager._nil
- OpenRTM_aist.CORBA_SeqUtil.erase(self._slaves, i)
- i -= 1
+ #OpenRTM_aist.CORBA_SeqUtil.erase(self._slaves, i)
+ #i -= 1
return crtcs
@@ -467,17 +495,20 @@
guard = OpenRTM_aist.ScopedLock(self._slaveMutex)
self._rtcout.RTC_DEBUG("%d slave managers exists.", len(self._slaves))
- for i in range(len(self._slaves)):
+ for slave in self._slaves[:]:
try:
- if not CORBA.is_nil(self._slaves[i]):
- sprofs = self._slaves[i].get_component_profiles()
+ if not CORBA.is_nil(slave):
+ sprofs = slave.get_component_profiles()
OpenRTM_aist.CORBA_SeqUtil.push_back_list(cprofs, sprofs)
except:
- self._rtcout.RTC_INFO("slave (%d) has disappeared.", i)
+ self._rtcout.RTC_ERROR("Unknown exception cought.")
+ self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception())
+ self.remove_slave_manager(slave)
+ #self._rtcout.RTC_INFO("slave (%d) has disappeared.", i)
#self._slaves[i] = RTM.Manager._nil
- OpenRTM_aist.CORBA_SeqUtil.erase(self._slaves, i)
- i -= 1
+ #OpenRTM_aist.CORBA_SeqUtil.erase(self._slaves, i)
+ #i -= 1
del guard
return cprofs
@@ -810,7 +841,11 @@
# ReturnCode_t fork()
def fork(self):
# self._mgr.fork()
- return RTC.RTC_OK
+ pid = OpenRTM_aist.fork()
+ if pid >= 0:
+ return RTC.RTC_OK
+ else:
+ return RTC.RTC_ERROR
##
Modified: trunk/OpenRTM-aist-Python/OpenRTM_aist/ModuleManager.py
===================================================================
--- trunk/OpenRTM-aist-Python/OpenRTM_aist/ModuleManager.py 2017-05-08 01:32:34 UTC (rev 827)
+++ trunk/OpenRTM-aist-Python/OpenRTM_aist/ModuleManager.py 2017-05-26 03:26:13 UTC (rev 828)
@@ -18,6 +18,7 @@
import sys,os
import glob
+import platform
import OpenRTM_aist
@@ -98,6 +99,9 @@
self._modules = OpenRTM_aist.ObjectManager(self.DLLPred)
self._rtcout = None
self._mgr = OpenRTM_aist.Manager.instance()
+ if not self._rtcout:
+ self._rtcout = self._mgr.getLogbuf("ModuleManager")
+ self._modprofs = []
##
# @if jp
@@ -242,8 +246,7 @@
# std::string ModuleManager::load(const std::string& file_name,
# const std::string& init_func)
def load(self, file_name, init_func=None):
- if not self._rtcout:
- self._rtcout = self._mgr.getLogbuf("ModuleManager")
+
self._rtcout.RTC_TRACE("load(fname = %s)", file_name)
if file_name == "":
@@ -503,8 +506,194 @@
return profs[0]
+
##
# @if jp
+ # @brief »ØÄê¸À¸ì¤Ë¤ª¤±¤ë¥í¡¼¥É¥Ñ¥¹¾å¤Î¥í¡¼¥À¥Ö¥ë¤Ê¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤òÊÖ¤¹
+ #
+ #
+ # @param self
+ # @param lang
+ # @param modules
+ #
+ #
+ # @else
+ # @brief Getting loadable file list on the loadpath for given language
+ # @endif
+ def getModuleList(self, lang, modules):
+ l = "manager.modules." + lang
+ lprop = self._properties.getNode(l)
+
+ paths = lprop.getProperty("load_paths").split(",")
+
+
+ paths.extend(self._loadPath)
+ paths = self.deleteSamePath(paths)
+
+ suffixes = lprop.getProperty("suffixes").split(",")
+
+
+ self._rtcout.RTC_DEBUG("suffixes: %s", OpenRTM_aist.flatten(suffixes))
+
+ for path in paths:
+ if not path:
+ self._rtcout.RTC_WARN("Given load path is empty")
+ continue
+ self._rtcout.RTC_DEBUG("Module load path: %s", path)
+ flist = []
+ for suffix in suffixes:
+ tmp = [suffix]
+ OpenRTM_aist.eraseHeadBlank(tmp)
+ suffix = tmp[0]
+
+ tmp = glob.glob(path + os.sep + '*.' + suffix)
+ if lang == "Python":
+ for f in tmp:
+ if f.find("__init__.py") != -1:
+ tmp.remove(f)
+
+ self._rtcout.RTC_DEBUG("File list (path:%s, ext:%s): %s", (path,suffix,OpenRTM_aist.flatten(suffixes)))
+ flist.extend(tmp)
+
+ for f in flist:
+ f = f.replace("\\","/")
+ self.addNewFile(f, modules)
+
+
+
+ ##
+ # @if jp
+ # @brief ¥¥ã¥Ã¥·¥å¤Ë̵¤¤¥Ñ¥¹¤À¤±modules¤ËÄɲ乤ë
+ #
+ #
+ # @param self
+ # @param fpath
+ # @param modules
+ #
+ #
+ # @else
+ # @brief Adding file path not existing cache
+ # @endif
+ def addNewFile(self, fpath, modules):
+ exists = False
+ for modprof in self._modprofs:
+ if modprof == fpath:
+ exists = True
+ self._rtcout.RTC_DEBUG("Module %s already exists in cache.",fpath)
+ break
+ if not exists:
+ self._rtcout.RTC_DEBUG("New module: %s",fpath)
+ modules.append(fpath)
+
+
+ ##
+ # @if jp
+ # @brief »ØÄê¸À¸ì¡¢¥Õ¥¡¥¤¥ë¥ê¥¹¥È¤«¤é¥â¥¸¥å¡¼¥ë¤Î¥×¥í¥Ñ¥Æ¥£¤òÊÖ¤¹
+ #
+ #
+ # @param self
+ # @param lang
+ # @param modules
+ # @param modprops
+ #
+ #
+ # @else
+ # @brief Getting loadable file list on the loadpath for given language
+ # @endif
+ def getModuleProfiles(self, lang, modules, modprops):
+ l = "manager.modules." + lang
+ lprop = self._properties.getNode(l)
+
+ paths = lprop.getProperty("load_paths").split(",")
+
+
+
+ for mod_ in modules:
+ if lang == "Python":
+ prop = self.__getRtcProfile(mod_)
+ if prop:
+ prop.setProperty("module_file_name",os.path.basename(mod_))
+ prop.setProperty("module_file_path", mod_)
+ modprops.append(prop)
+ else:
+ prop = OpenRTM_aist.Properties()
+ cmd = lprop.getProperty("profile_cmd")
+ if platform.system() == "Windows":
+ cmd = "cmd /c " + cmd
+ cmd = cmd + " \""+mod_+"\""
+
+ try:
+ ret = OpenRTM_aist.popen(cmd).split("\r\n")
+ for r in ret:
+ pos = r.find(":")
+ if r.find(":") != -1:
+ key = r[0:pos]
+ tmp = [key]
+ OpenRTM_aist.eraseHeadBlank(tmp)
+ key = tmp[0]
+
+ value = r[pos:]
+ tmp = [value]
+ OpenRTM_aist.eraseHeadBlank(tmp)
+ value = tmp[0]
+
+ prop.setProperty(key, value)
+ self._rtcout.RTC_DEBUG("rtcprof cmd sub process done.")
+ prop.setProperty("module_file_name",os.path.basename(mod_))
+ prop.setProperty("module_file_path", mod_)
+ modprops.append(prop)
+
+
+ except:
+ self._rtcout.RTC_ERROR("popen faild")
+
+
+ ##
+ # @if jp
+ # @brief ̵¸ú¤Ê¥â¥¸¥å¡¼¥ë¥×¥í¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë
+ #
+ #
+ # @param self
+ #
+ #
+ # @else
+ # @brief Removing incalid module profiles
+ # @endif
+ def removeInvalidModules(self):
+ for modprof in self._modprofs:
+ if not os.path.isfile(modprof.getProperty("module_file_path")):
+ self._modprofs.remove(modprof)
+
+
+
+ ##
+ # @if jp
+ # @brief Ʊ¤¸¥Ñ¥¹¤òºï½ü
+ #
+ #
+ # @param self
+ # @param paths
+ #
+ #
+ # @else
+ # @brief
+ # @endif
+ def deleteSamePath(self, paths):
+ tmp_paths = []
+ for path in paths:
+ if path:
+ abs_path = os.path.abspath(path).replace("\\","/")
+ abs_tmp_paths = []
+ for tmp_path in tmp_paths:
+ abs_tmp_path = os.path.abspath(tmp_path).replace("\\","/")
+ abs_tmp_paths.append(abs_tmp_path)
+ if abs_path not in abs_tmp_paths:
+ tmp_paths.append(path)
+ return tmp_paths
+
+
+ ##
+ # @if jp
# @brief ¥í¡¼¥É²Äǽ¥â¥¸¥å¡¼¥ë¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë(̤¼ÂÁõ)
#
# ¥í¡¼¥É²Äǽ¤Ê¥â¥¸¥å¡¼¥ë¤Î¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë¡£
@@ -517,27 +706,33 @@
# @brief Get loadable module names
# @endif
def getLoadableModules(self):
+ self._rtcout.RTC_TRACE("getLoadableModules()")
# getting loadable module file path list.
- modules_ = []
- for path in self._loadPath:
- if path == "":
- continue
+ langs = self._properties.getProperty("manager.supported_languages").split(",")
+ self._rtcout.RTC_DEBUG("langs: %s",self._properties.getProperty("manager.supported_languages"))
- flist = glob.glob(path + os.sep + '*.py')
- for file in flist:
- if file.find("__init__.py") == -1:
- modules_.append(file)
+ for lang in langs:
+ tmp = [lang]
+ OpenRTM_aist.eraseHeadBlank(tmp)
+ lang = tmp[0]
+
+ modules_ = []
+ self.getModuleList(lang, modules_)
+ self._rtcout.RTC_DEBUG("%s: %s", (lang, OpenRTM_aist.flatten(modules_)))
+
+ tmpprops = []
+ self.getModuleProfiles(lang, modules_, tmpprops)
+ self._rtcout.RTC_DEBUG("Modile profile size: %d (newly founded modules)",len(tmpprops))
+
+ self._modprofs.extend(tmpprops)
+
+ self._rtcout.RTC_DEBUG("Modile profile size: %d",len(self._modprofs))
+ self.removeInvalidModules()
+ self._rtcout.RTC_DEBUG("Modile profile size: %d (invalid mod-profiles deleted)",len(self._modprofs))
+
+ return self._modprofs
- props = []
- # getting module properties from loadable modules
- for mod_ in modules_:
- prop = self.__getRtcProfile(mod_)
- if prop:
- prop.setProperty("module_file_name",os.path.basename(mod_))
- prop.setProperty("module_file_path", mod_)
- props.append(prop)
- return props
Modified: trunk/OpenRTM-aist-Python/OpenRTM_aist/Process.py
===================================================================
--- trunk/OpenRTM-aist-Python/OpenRTM_aist/Process.py 2017-05-08 01:32:34 UTC (rev 827)
+++ trunk/OpenRTM-aist-Python/OpenRTM_aist/Process.py 2017-05-26 03:26:13 UTC (rev 828)
@@ -19,6 +19,7 @@
import traceback
import subprocess
import shlex
+import platform
##
# @if jp
@@ -61,3 +62,31 @@
return -1
return 0
+
+##
+# @if jp
+# @brief ¥×¥í¥»¥¹¤òÊ£À½¤¹¤ë
+# @else
+# @brief fork process
+# @endif
+#
+# int fork()
+def fork():
+ if platform.system() == "Windows":
+ return -1
+ else:
+ pid = os.fork()
+ return pid
+
+##
+# @if jp
+# @brief ¥×¥í¥»¥¹¤òµ¯Æ°¤·½ÐÎϤò¼èÆÀ¤¹¤ë
+# @else
+# @brief fork process
+# @endif
+#
+# int fork()
+def popen(command):
+ args = shlex.split(command," ")
+ sp = subprocess.Popen(args, stdout=subprocess.PIPE)
+ return sp.communicate()[0]
Modified: trunk/OpenRTM-aist-Python/OpenRTM_aist/RTM_IDL/Manager.idl
===================================================================
--- trunk/OpenRTM-aist-Python/OpenRTM_aist/RTM_IDL/Manager.idl 2017-05-08 01:32:34 UTC (rev 827)
+++ trunk/OpenRTM-aist-Python/OpenRTM_aist/RTM_IDL/Manager.idl 2017-05-26 03:26:13 UTC (rev 828)
@@ -5,9 +5,7 @@
* @date $Date: 2005-05-12 09:06:18 $
* @author Noriaki Ando <n-ando at aist.go.jp>
*
- * Copyright (C) 2003-2005
- * Task-intelligence Research Group,
- * Intelligent Systems Research Institute,
+ * Copyright (C) 2003-2017
* National Institute of
* Advanced Industrial Science and Technology (AIST), Japan
* All rights reserved.
@@ -45,25 +43,96 @@
interface Manager;
typedef sequence<Manager> ManagerList;
+ /*!
+ * @if jp
+ * @interface Manager
+ *
+ * RTコンポーネントのライフサイクルの管理などを行うManagerへの外部イ
+ * ンターフェース。主たる機能としては、以下のものがある。
+ *
+ * - RTCのローダブルモジュールの操作
+ * - モジュールのロード
+ * - モジュールのアンロード
+ * - ロード可能なモジュール一覧の取得
+ * - ロード済みモジュール一覧の取得
+ * - ロード済みモジュールのプロファイル一覧の取得
+ * - RTCに関する操作
+ * - コンポーネントの生成
+ * - コンポーネントの削除
+ * - インスタンス化済みのRTC一覧の取得
+ * - インスタンス化済みのRTCのプロファイル一覧の取得
+ * - 名前によるコンポーネントの取得
+ * - マネージャに関する操作
+ * - マネージャのプロファイル情報の取得
+ * - マネージャのコンフィギュレーション情報の取得
+ * - マネージャのコンフィギュレーション情報の設定
+ * - マネージャがマスターかどうか
+ * - マスターマネージャの取得
+ * - マスターマネージャの追加
+ * - マスターマネージャの削除
+ * - スレーブマネージャの取得
+ * - スレーブマネージャの追加
+ * - スレーブマネージャの削除
+ * - サービスの取得
+ * - プロセス操作
+ * - フォーク
+ * - シャットダウン
+ * - リスタート
+ *
+ * マネージャには、同一ノード内で原則1つしか存在しないマスターマネー
+ * ジャと、マスターマネージャの管理下に0個以上存在するスレーブマネー
+ * ジャが存在する。
+ *
+ * マスターマネージャは通常、デーモン・サービスなどとして常駐し、ノー
+ * ドのOS稼働中は原則として常に動作し続ける。また、マスターマネージャ
+ * は自身の内部にRTCを生成・ホストせず、RTCの生成はスレーブマネージャ
+ * に依頼する。依頼するスレーブマネージャは、すでに起動しているもので
+ * も、マスターマネージャが新規に起動してもよい。どちらの方法でRTCを
+ * 生成するかは、create_component() の引数にて指定する。なお、スレー
+ * ブマネージャは通常、1つ以上のRTCをホストする。デフォルトの設定では、
+ * RTCをホストしていないスレーブマネージャは自動終了する。
+ * 設定項目:
+ * - manager.shutdown_on_nortcs: YES
+ * - manager.shutdown_auto: YES
+ *
+ * <pre>
+ * 1 0..* 1 1..*
+ * [ master ]<>----------[ slave ]<>----------[ RTC ]
+ *
+ * </pre>
+ *
+ * @else
+ * @interface
+ *
+ * @endif
+ */
interface Manager
{
- // module ´ØÏ¢
+ // module 関連
/*!
* @if jp
- * @brief ¥â¥¸¥å¡¼¥ë¤ò¥í¡¼¥É¤¹¤ë
+ * @brief モジュールをロードする
*
- * Åö³º¥Þ¥Í¡¼¥¸¥ã¤Ë»ØÄꤵ¤ì¤¿¥â¥¸¥å¡¼¥ë¤ò¥í¡¼¥É¤·¡¢»ØÄꤵ¤ì¤¿½é´ü²½
- * ´Ø¿ô¤Ç½é´ü²½¤ò¹Ô¤¦¡£
+ * 当該マネージャに指定されたモジュールをロードし、指定された初期化
+ * 関数で初期化を行う。任意の共有オブジェクトファイル (.so, .dll)
+ * をロード可能であり、コンポーネントの共有オブジェクトファイルに限
+ * らない。通常、RTCの生成時は自動的にロードパス上を共有オブジェク
+ * トファイルを探索するため、この操作を呼び出す必要はない。
*
- * @param pathname ¥â¥¸¥å¡¼¥ë¤Ø¤Î¥Ñ¥¹
- * @param initfunc ¥â¥¸¥å¡¼¥ë¤Î½é´ü²½´Ø¿ô
- * @return ¥ê¥¿¡¼¥ó¥³¡¼¥É
+ * @param pathname モジュールへのパス
+ * @param initfunc モジュールの初期化関数
+ * @return リターンコード
*
* @else
* @brief Loading a module
*
- * This operation loads a specified loadable module¡¢and perform
- * initialization with the specified function.
+ * This operation loads a specified loadable module、and perform
+ * initialization with the specified function. Any kind of shared
+ * objects (.so, .dll) not only RT-Component's shared object can
+ * be loadable. Usually, you do not need to call this operation to
+ * create RT-Components, because RTC creation operation
+ * automatically search RTC's loadable module in the specified
+ * load path.
*
* @param pathname A path to a loading module.
* @param initfunc Module initialization function.
@@ -75,17 +144,29 @@
/*!
* @if jp
- * @brief ¥â¥¸¥å¡¼¥ë¤ò¥¢¥ó¥í¡¼¥É¤¹¤ë
+ * @brief モジュールをアンロードする
*
- * Åö³º¥Þ¥Í¡¼¥¸¥ã¤Ë»ØÄꤵ¤ì¤¿¥â¥¸¥å¡¼¥ë¤ò¥¢¥ó¥í¡¼¥É¤¹¤ë¡£
+ * 当該マネージャに指定されたモジュールをアンロードする。現在のとこ
+ * ろ、OpenRTM-aistのモジュールロード機能は、ロードされたモジュール
+ * により生成されたオブジェクトのリファレンスカウント管理等は行われ
+ * ていないので、安易にモジュールをアンロードすると、メモリアクセス
+ * 違反を引き起こす恐れがある。ただ、多くの動的ライブラリのアンロー
+ * ドの実装では、実際にメモリ上からアンロードされないケースが多く、
+ * したがってこのオペレーションは呼び出すことを推奨しない。
*
- * @param pathname ¥â¥¸¥å¡¼¥ë¤Ø¤Î¥Ñ¥¹
- * @return ¥ê¥¿¡¼¥ó¥³¡¼¥É
+ * @param pathname モジュールへのパス
+ * @return リターンコード
*
* @else
* @brief Unloading a module
*
- * This operation unloads a specified loadable module.
+ * This operation unloads a specified loadable module. Currently
+ * since OpenRTM-aist's module load function does not manage
+ * object reference count which is created from the loaded shared
+ * object, unloading might cause segmentation fault. However, most
+ * of unload function implementation actually does not unload
+ * shared object from memory space, and it is not recommended to
+ * call this operation in actual use.
*
* @param pathname A path to a loading module.
* @return The return code.
@@ -96,19 +177,114 @@
/*!
* @if jp
- * @brief ¥í¡¼¥É²Äǽ¤Ê¥â¥¸¥å¡¼¥ë¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤¹¤ë
+ * @brief ロード可能なモジュールのプロファイルを取得する
*
- * ¥í¡¼¥É²Äǽ¤Ê¥â¥¸¥å¡¼¥ë¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤¹¤ë¡£
+ * ロード可能なモジュールのプロファイルを取得する。ロード可能なRTコ
+ * ンポーネントのモジュールのプロファイルは、あらかじめ設定されたモ
+ * ジュールロードパスに対して、プロファイル取得コマンドを別プロセス
+ * で実行することで取得する。プロファイル取得対象となる言語の種類は、
*
- * @return ¥â¥¸¥å¡¼¥ë¥×¥í¥Õ¥¡¥¤¥ë
+ * - manager.supported_language: C++, Python, Java
*
+ * で設定されている。ここで指定された言語に対して、以下のプロパティ
+ * で言語毎のモジュールロードパス、プロファイル取得コマンド、モジュー
+ * ル拡張子が指定される。
+ *
+ * - manager.modules.<言語>.load_paths: ./ (モジュールロードパス)
+ * - manager.modules.<言語>.profile_cmd: rtcprof等コマンド名
+ * - manager.modules.<言語>.suffixes: モジュール拡張子
+ *
+ * 例えば、C++ 言語の場合は、以下のプロパティがデフォルトで設定されている。
+ *
+ * - manager.modules.C++.load_paths: ./ (モジュールロードパス)
+ * - manager.modules.C++.profile_cmd: rtcprof
+ * - manager.modules.C++.suffixes: so (Linuxの場合), dll (Windowsの場合)
+ *
+ * マスターマネージャは、上記で設定されたすべての言語 (Windowsでは
+ * すべてのVCのバージョンも含む) のモジュールロードパスがあらかじめ
+ * 設定されている必要がある。 この作業は、このオペレーションが呼び
+ * 出されたマネージャ (通常はマスターマネージャ) 上でのみ実行され、
+ * 配下にあるスレーブマネージャ等に再帰的に呼び出されることはない。
+ *
+ * @return モジュールプロファイル。なお、モジュールプロファイルは以
+ * 下のような内容を持つKey-Value形式のリストで返される。
+ * <pre>
+ * implementation_id: ConfigSample
+ * type_name: ConfigSample
+ * description: Configuration example component
+ * version: 1.0
+ * vendor: Noriaki Ando, AIST
+ * category: example
+ * activity_type: DataFlowComponent
+ * max_instance: 10
+ * language: C++
+ * lang_type: compile
+ * conf.default.int_param0: 0
+ * conf.default.int_param1: 1
+ * conf.default.double_param0: 0.11
+ * conf.default.double_param1: 9.9
+ * conf.default.str_param0: hoge
+ * conf.default.str_param1: dara
+ * conf.default.vector_param0: 0.0,1.0,2.0,3.0,4.0
+ * </pre>
+ *
* @else
* @brief Getting loadable module profiles
*
- * This operation returns loadable module profiles.
+ * This operation returns loadable module profiles. Loadable
+ * profiles of RT-Components can be obtained by executing profile
+ * obtain commands (ex. rtcprof) into the module load paths that
+ * is specified in the properties. The target kinds of language to
+ * be obtained component profiles are specified the following
+ * property.
*
- * @return A module profile list.
+ * - manager.supported_language: C++, Python, Java
*
+ * For each those languages, module load paths, profile obtain
+ * command and module suffixes are specified in following
+ * properties.
+ *
+ * - manager.modules.<lang>.load_paths: ./ (load paths)
+ * - manager.modules.<lang>.profile_cmd: rtcprof command name
+ * - manager.modules.<lang>.suffixes: module extentions
+ *
+ * For example, the following properties are specified in default
+ * for C++ language.
+ *
+ * - manager.modules.C++.load_paths: ./ (module load pathds)
+ * - manager.modules.C++.profile_cmd: rtcprof
+ * - manager.modules.C++.suffixes: so (for Linux), dll (for Windows)
+ *
+ * The master manager need to be configured module load paths for
+ * all languages (and for all versions of VC in case of Windows)
+ * specified above. This process is performed in only a manager
+ * (master manager in general) in which this operation is called,
+ * and it is not recursively called to slave managers which are
+ * managed by this manager.
+ *
+ * @return A module profile list. The module profiles list
+ * includes zero or more the following Key-Value format
+ * RTC profile.
+ * <pre>
+ * implementation_id: ConfigSample
+ * type_name: ConfigSample
+ * description: Configuration example component
+ * version: 1.0
+ * vendor: Noriaki Ando, AIST
+ * category: example
+ * activity_type: DataFlowComponent
+ * max_instance: 10
+ * language: C++
+ * lang_type: compile
+ * conf.default.int_param0: 0
+ * conf.default.int_param1: 1
+ * conf.default.double_param0: 0.11
+ * conf.default.double_param1: 9.9
+ * conf.default.str_param0: hoge
+ * conf.default.str_param1: dara
+ * conf.default.vector_param0: 0.0,1.0,2.0,3.0,4.0
+ * </pre>
+ *
* @endig
*/
ModuleProfileList get_loadable_modules();
@@ -115,11 +291,14 @@
/*!
* @if jp
- * @brief ¥í¡¼¥ÉºÑ¤ß¤Î¥â¥¸¥å¡¼¥ë¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤¹¤ë
+ * @brief ロード済みのモジュールのプロファイルを取得する
*
- * ¥í¡¼¥ÉºÑ¤ß¤Î¥â¥¸¥å¡¼¥ë¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤¹¤ë¡£
+ * ロード済みのモジュールのプロファイルを取得する。このオペレーショ
+ * ンでは、スレーブマネージャに対しても同じオペレーションが再帰的に
+ * 呼び出され、配下にあるすべてのマネージャがロードしているすべての
+ * モジュールのプロファイルを返す。
*
- * @return ¥â¥¸¥å¡¼¥ë¥×¥í¥Õ¥¡¥¤¥ë
+ * @return モジュールプロファイル
*
* @else
* @brief Getting loaded module profiles
@@ -132,15 +311,18 @@
*/
ModuleProfileList get_loaded_modules();
- // component ´ØÏ¢
+ // component 関連
/*!
* @if jp
- * @brief ¥³¥ó¥Ý¡¼¥Í¥ó¥È¥Õ¥¡¥¯¥È¥ê¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤¹¤ë
+ * @brief コンポーネントファクトリのプロファイルを取得する
*
- * ¥í¡¼¥ÉºÑ¤ß¤Î¥â¥¸¥å¡¼¥ë¤Î¤¦¤Á¡¢RT¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¥â¥¸¥å¡¼¥ë¤¬»ý¤Ä
- * ¥Õ¥¡¥¯¥È¥ê¤Î¥×¥í¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë¡£
+ * ロード済みのモジュールのうち、RTコンポーネントのモジュールが持つ
+ * ファクトリのプロファイルのリストを取得する。このオペレーションで
+ * は、スレーブマネージャに対しても同じオペレーションが再帰的に呼び
+ * 出され、配下にあるすべてのマネージャが保有するRTコンポーネントの
+ * プロファイルを返す。
*
- * @return ¥³¥ó¥Ý¡¼¥Í¥ó¥È¥Õ¥¡¥¯¥È¥ê¤Î¥×¥í¥Õ¥¡¥¤¥ë¥ê¥¹¥È
+ * @return コンポーネントファクトリのプロファイルリスト
*
* @else
* @brief Getting component factory profiles
@@ -156,12 +338,79 @@
/*!
* @if jp
- * @brief ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òÀ¸À®¤¹¤ë
+ * @brief コンポーネントを生成する
*
- * °ú¿ô¤Ë»ØÄꤵ¤ì¤¿¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òÀ¸À®¤¹¤ë¡£
+ * 引数に指定されたコンポーネントを生成する。マスターマネージャに対
+ * してこのオペレーションが呼び出された場合には、スレーブマネージャ
+ * に対してコンポーネントの生成を依頼する。依頼対象となるスレーブマ
+ * ネージャは、create_component() の引数内パラメータ manager_name
+ * により指定されたマネージャが配下にある場合は、そのマネージャに対
+ * して、create_component() を呼び出すことで生成、manager_name で指
+ * 定されたマネージャがない場合は、新規にスレーブマネージャを起動し
+ * てからコンポーネントを生成する。
*
- * @return À¸À®¤µ¤ì¤¿RT¥³¥ó¥Ý¡¼¥Í¥ó¥È
+ * - manager_nameで指定されたスレーブが存在する場合
+ * <pre>
+ * (maanger_name = servo)
+ * [ app ] [ master ] [ slave ] [ RTC ]
+ * | create_comp() | | .
+ * |---------------->| | .
+ * | manager_name = |--, search | .
+ * | servo | | slaves | .
+ * | |<-' | .
+ * | | create_comp() | .
+ * | |---------------->| .
+ * | | |--, .
+ * | | | |createComp() .
+ * | | |<-' .
+ * | | |.....create...> .
+ * | | | |
+ * | | | |
+ * </pre>
*
+ * - manager_nameで指定されたスレーブが存在しない場合
+ * <pre>
+ * [ app ] [ master ] [ slave ] [ RTC ]
+ * | create_comp() | . .
+ * |---------------->| . .
+ * | manager_name = |--, search . .
+ * | controller | | slaves . .
+ * | |<-' . .
+ * | | launch proc . .
+ * | |---------------->| .
+ * | | create_comp() | .
+ * | |---------------->| .
+ * | | |--, .
+ * | | | |createComp() .
+ * | | |<-' .
+ * | | |.....create...> .
+ * | | | |
+ * | | | |
+ * </pre>
+ *
+ * 指定パラメータ
+ * - manager_name: コンポーネントを起動するスレーブマネージャ名
+ * - 名前指定: <manager_name>
+ * - アドレス指定: <hostname>:<port>
+ * - language: 起動対象のコンポーネントの実装言語
+ *
+ * @param module_name 生成対象RTコンポーネントIDおよびコンフィギュ
+ * レーション引数。フォーマットは大きく分けて
+ * "id" と "configuration" 部分が存在する。
+ *
+ * comp_args: [id]?[configuration]
+ * id は必須、configurationはオプション
+ * id: RTC:[vendor]:[category]:[implementation_id]:[version]
+ * RTC は固定かつ必須
+ * vendor, category, version はオプション
+ * implementation_id は必須
+ * オプションを省略する場合でも ":" は省略不可
+ * configuration: [key0]=[value0]&[key1]=[value1]&[key2]=[value2].....
+ * RTCが持つPropertiesの値をすべて上書きすることができる。
+ * key=value の形式で記述し、"&" で区切る
+ *
+ * @return 生成されたRTコンポーネント
+ *
* @else
* @brief Creating an RT-Component
*
@@ -176,11 +425,15 @@
/*!
* @if jp
- * @brief ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òºï½ü¤¹¤ë
+ * @brief コンポーネントを削除する
*
- * °ú¿ô¤Ë»ØÄꤵ¤ì¤¿¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òºï½ü¤¹¤ë¡£
+ * 引数に指定されたコンポーネントを削除する。マスターマネージャに対
+ * してこのオペレーションが呼び出された場合、配下のスレーブコンポー
+ * ネント上の当該コンポーネントを削除する。ただし、通常は対象コンポー
+ * ネントに対して exit() オペレーションを呼び出すことで RTC を終了
+ * させる方法を推奨する。
*
- * @return ¥ê¥¿¡¼¥ó¥³¡¼¥É
+ * @return リターンコード
*
* @else
* @brief Deleting an RT-Component
@@ -196,11 +449,15 @@
/*!
* @if jp
- * @brief µ¯Æ°Ãæ¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë
+ * @brief 起動中のコンポーネントのリストを取得する
*
- * ¸½ºßÅö³º¥Þ¥Í¡¼¥¸¥ã¾å¤Çµ¯Æ°Ãæ¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£
+ * 現在当該マネージャ上で起動中のコンポーネントのリストを返す。マス
+ * ターマネージャに対してこのオペレーションが呼び出された場合、配下
+ * のスレーブコンポーネント上で実行中のRTCのリストを収集して返す。
+ * スレーブマネージャに対して呼び出された場合には、自身が管理する起
+ * 動中のRTCのリストのみを返す。
*
- * @return RT¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¥ê¥¹¥È
+ * @return RTコンポーネントのリスト
*
* @else
* @brief Getting RT-Component list running on this manager
@@ -215,12 +472,16 @@
/*!
* @if jp
- * @brief µ¯Æ°Ãæ¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¥×¥í¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë
+ * @brief 起動中のコンポーネントプロファイルのリストを取得する
*
- * ¸½ºßÅö³º¥Þ¥Í¡¼¥¸¥ã¾å¤Çµ¯Æ°Ãæ¤Î¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¥×¥í¥Õ¥¡¥¤¥ë¤Î¥ê¥¹
- * ¥È¤òÊÖ¤¹¡£
+ * 現在当該マネージャ上で起動中のコンポーネントのプロファイルのリス
+ * トを返す。マスターマネージャに対してこのオペレーションが呼び出さ
+ * れた場合、配下のスレーブコンポーネント上で実行中のRTCのプロファ
+ * イルリストを収集して返す。スレーブマネージャに対して呼び出された
+ * 場合には、自身が管理する起動中のRTCのプロファイルリストのみを返
+ * す。
*
- * @return RT¥³¥ó¥Ý¡¼¥Í¥ó¥È¥×¥í¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È
+ * @return RTコンポーネントプロファイルのリスト
*
* @else
* @brief Getting RT-Component's profile list running on this manager
@@ -234,16 +495,37 @@
*/
RTC::ComponentProfileList get_component_profiles();
- // manager ´ðËÜ
/*!
* @if jp
- * @brief ¥Þ¥Í¡¼¥¸¥ã¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤¹¤ë
+ * @brief 指定名のRTCオブジェクトリファレンスを取得
*
- * ¸½ºßÅö³º¥Þ¥Í¡¼¥¸¥ã¤Î¥×¥í¥Õ¥¡¥¤¥ë¤ò¼èÆÀ¤¹¤ë¡£
+ *
*
- * @return ¥Þ¥Í¡¼¥¸¥ã¥×¥í¥Õ¥¡¥¤¥ë
+ * @param name RTC名
+ * @return RTCリスト
*
* @else
+ * @brief
+ *
+ *
+ *
+ * @param name name
+ * @return list of RTC
+ *
+ * @endig
+ */
+ RTC::RTCList get_components_by_name(in string name);
+
+ // manager 基本
+ /*!
+ * @if jp
+ * @brief マネージャのプロファイルを取得する
+ *
+ * 現在当該マネージャのプロファイルを取得する。
+ *
+ * @return マネージャプロファイル
+ *
+ * @else
* @brief Getting this manager's profile.
*
* This operation returns this manager's profile.
@@ -256,11 +538,11 @@
/*!
* @if jp
- * @brief ¥Þ¥Í¡¼¥¸¥ã¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ò¼èÆÀ¤¹¤ë
+ * @brief マネージャのコンフィギュレーションを取得する
*
- * ¸½ºßÅö³º¥Þ¥Í¡¼¥¸¥ã¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ò¼èÆÀ¤¹¤ë¡£
+ * 現在当該マネージャのコンフィギュレーションを取得する。
*
- * @return ¥Þ¥Í¡¼¥¸¥ã¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó
+ * @return マネージャコンフィギュレーション
*
* @else
* @brief Getting this manager's configuration.
@@ -275,13 +557,13 @@
/*!
* @if jp
- * @brief ¥Þ¥Í¡¼¥¸¥ã¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤òÀßÄꤹ¤ë
+ * @brief マネージャのコンフィギュレーションを設定する
*
- * ¸½ºßÅö³º¥Þ¥Í¡¼¥¸¥ã¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤òÀßÄꤹ¤ë¡£
+ * 現在当該マネージャのコンフィギュレーションを設定する。
*
- * @param name ¥»¥Ã¥È¤¹¤ë¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤Î¥¡¼Ì¾
- * @param value ¥»¥Ã¥È¤¹¤ë¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ÎÃÍ
- * @return ¥ê¥¿¡¼¥ó¥³¡¼¥É
+ * @param name セットするコンフィギュレーションのキー名
+ * @param value セットするコンフィギュレーションの値
+ * @return リターンコード
*
* @else
* @brief Setting manager's configuration
@@ -298,12 +580,12 @@
/*!
* @if jp
- * @brief ¥Þ¥Í¡¼¥¸¥ã¤¬¥Þ¥¹¥¿¡¼¤«¤É¤¦¤«
+ * @brief マネージャがマスターかどうか
*
- * ¤³¤Î´Ø¿ô¤Ï¥Þ¥Í¡¼¥¸¥ã¤¬¥Þ¥¹¥¿¡¼¤«¤É¤¦¤«¤òÊÖ¤¹¡£True¤Ê¤é¤Ð¡¢Åö³º¥Þ
- * ¥Í¡¼¥¸¥ã¤Ï¥Þ¥¹¥¿¡¼¤Ç¤¢¤ê¡¢¤½¤ì°Ê³°¤Ï False ¤òÊÖ¤¹¡£
+ * この関数はマネージャがマスターかどうかを返す。Trueならば、当該マ
+ * ネージャはマスターであり、それ以外は False を返す。
*
- * @return ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã¤«¤É¤¦¤«¤ÎboolÃÍ
+ * @return マスターマネージャかどうかのbool値
*
* @else
* @brief Whether this manager is master or not
@@ -319,13 +601,16 @@
/*!
* @if jp
- * @brief ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã¤Î¼èÆÀ
+ * @brief マスターマネージャの取得
*
- * ¤³¤Î¥Þ¥Í¡¼¥¸¥ã¤¬¥¹¥ì¡¼¥Ö¥Þ¥Í¡¼¥¸¥ã¤Î¾ì¹ç¡¢¥Þ¥¹¥¿¡¼¤È¤Ê¤Ã¤Æ¤¤¤ë¥Þ
- * ¥Í¡¼¥¸¥ã¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£¤³¤Î¥Þ¥Í¡¼¥¸¥ã¤¬¥Þ¥¹¥¿¡¼¤Î¾ì¹ç¡¢¶õ¤Î¥ê¥¹
- * ¥È¤¬Ê֤롣
+ * このマネージャがスレーブマネージャの場合、マスターとなっているマ
+ * ネージャのリストを返す。このマネージャがマスターの場合、空のリス
+ * トが返る。原則としてスレーブマネージャは1つのマスターマネージャ
+ * の配下となるが、実装上はマスターマネージャは唯一となるような制約
+ * はなく、add_master_manager() オペレーションにより複数のマスター
+ * マネージャを登録することが可能である。
*
- * @return ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã¤Î¥ê¥¹¥È
+ * @return マスターマネージャのリスト
*
* @else
* @brief Getting master managers
@@ -342,11 +627,51 @@
/*!
* @if jp
- * @brief ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã¤ÎÄɲÃ
+ * @brief マスターマネージャの追加
*
- * ¤³¤Î¥Þ¥Í¡¼¥¸¥ã¤Î¥Þ¥¹¥¿¤È¤·¤Æ¥Þ¥Í¡¼¥¸¥ã¤ò°ì¤ÄÄɲ乤롣
+ * このマネージャのマスタとしてマネージャを一つ追加する。
*
- * @param mgr ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã
+ * マスターマネージャとスレーブマネージャの関係は、以下の図のように、
+ * 一つのノード (node: 1つの独立したコンピュータでありホスト) に対
+ * して、1つのマスター (master) マネージャが対応する。1つのマスター
+ * マネージャの下には0個以上のスレーブ (slave) マネージャが存在し、
+ * RTCは1つのスレーブマネージャに属する。なお、スレーブマネージャは
+ * 通常、1つ以上のRTCをホストする。デフォルトの設定では、RTCをホス
+ * トしていないスレーブマネージャは自動終了する。
+ *
+ * <pre>
+ * 1 1 1 0..* 1 1..*
+ * [ node ]<>--------[ master ]<>--------[ slave ]<>--------[ RTC ]
+ *
+ * </pre>
+ *
+ * マスターとスレーブの関係は、add/remove_master_manager(),
+ * add_remove_slave_manager() オペレーションによって構成される。こ
+ * れらのオペレーションは原則として、すべてスレーブマネージャからア
+ * クションを開始する。マスターマネージャは原則として、
+ * corbaloc://localhost:2810/manager によりオブジェクト参照を取得で
+ * きる一方、スレーブマネージャの参照を知る一般的方法はない。スレー
+ * ブマネージャは、起動時にローカルのマスターマネージャを探して、内
+ * 部的にこのオペレーションを呼び出し、マスターマネージャを追加する
+ * とともに、マスターマネージャに対して、add_slabe_manager() を呼び
+ * 出して、マスターマネージャに対して、スレーブマネージャが配下に入っ
+ * たことを知らせる。
+ *
+ * <pre>
+ * [ master ] [ slave ]
+ * | |
+ * | |--, find master
+ * | | | by corbaloc:
+ * | |<-'
+ * | |
+ * | |--,
+ * | | | add_master_manager()
+ * | add_slave_manager(own_ref)|<-'
+ * |<--------------------------|
+ * | |
+ * </pre>
+ *
+ * @param mgr マスターマネージャ
* @return ReturnCode_t
*
* @else
@@ -363,11 +688,29 @@
/*!
* @if jp
- * @brief ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã¤Îºï½ü
+ * @brief マスターマネージャの削除
*
- * ¤³¤Î¥Þ¥Í¡¼¥¸¥ã¤¬ÊÝ»ý¤¹¤ë¥Þ¥¹¥¿¤Î¤¦¤Á¡¢»ØÄꤵ¤ì¤¿¤â¤Î¤òºï½ü¤¹¤ë¡£
+ * このマネージャが保持するマスタのうち、指定されたものを削除する。
+ * 通常このオペレーションは、スレーブマネージャが終了する際に、自身
+ * に対して呼び出される。また、スレーブマネージャ自身がマスターマネー
+ * ジャの配下から外れることを remove_slave_manager() により、マスター
+ * マネージャに対して通知する。
*
- * @param mgr ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã
+ * <pre>
+ * [ master ] [ slave ]
+ * | |
+ * | |--, shutdown
+ * | | | slave manager
+ * | |<-'
+ * | |
+ * | |--,
+ * | | | remove_master_manager()
+ * | remove_slave_manager(own_ref) |<-'
+ * |<------------------------------|
+ * | |
+ * </pre>
+ *
+ * @param mgr マスターマネージャ
* @return ReturnCode_t
*
* @else
@@ -384,13 +727,13 @@
/*!
* @if jp
- * @brief ¥¹¥ì¡¼¥Ö¥Þ¥Í¡¼¥¸¥ã¤Î¼èÆÀ
+ * @brief スレーブマネージャの取得
*
- * ¤³¤Î¥Þ¥Í¡¼¥¸¥ã¤¬¥¹¥ì¡¼¥Ö¥Þ¥Í¡¼¥¸¥ã¤Î¾ì¹ç¡¢¥¹¥ì¡¼¥Ö¤È¤Ê¤Ã¤Æ¤¤¤ë¥Þ
- * ¥Í¡¼¥¸¥ã¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£¤³¤Î¥Þ¥Í¡¼¥¸¥ã¤¬¥¹¥ì¡¼¥Ö¤Î¾ì¹ç¡¢¶õ¤Î¥ê¥¹
- * ¥È¤¬Ê֤롣
+ * このマネージャがスレーブマネージャの場合、スレーブとなっているマ
+ * ネージャのリストを返す。このマネージャがスレーブの場合、空のリス
+ * トが返る。
*
- * @return ¥¹¥ì¡¼¥Ö¥Þ¥Í¡¼¥¸¥ã¤Î¥ê¥¹¥È
+ * @return スレーブマネージャのリスト
*
* @else
* @brief Getting slave managers
@@ -404,13 +747,33 @@
* @endig
*/
ManagerList get_slave_managers();
+
/*!
* @if jp
- * @brief ¥¹¥ì¡¼¥Ö¥Þ¥Í¡¼¥¸¥ã¤ÎÄɲÃ
+ * @brief スレーブマネージャの追加
*
- * ¤³¤Î¥Þ¥Í¡¼¥¸¥ã¤Î¥Þ¥¹¥¿¤È¤·¤Æ¥Þ¥Í¡¼¥¸¥ã¤ò°ì¤ÄÄɲ乤롣
+ * このマネージャのマスタとしてマネージャを一つ追加する。通常、スレー
+ * ブマネージャは、起動時にローカルのマスターマネージャを探して、内
+ * 部的に、add_master_manager() を呼び出し、マスターマネージャを追
+ * 加するとともに、マスターマネージャに対して、この
+ * add_slave_manager() を呼び出して、マスターマネージャに対して、ス
+ * レーブマネージャが配下に入ったことを知らせる。
*
- * @param mgr ¥¹¥ì¡¼¥Ö¥Þ¥Í¡¼¥¸¥ã
+ * <pre>
+ * [ master ] [ slave ]
+ * | |
+ * | |--, find master
+ * | | | by corbaloc:
+ * | |<-'
+ * | |
+ * | |--,
+ * | | | add_master_manager()
+ * | add_slave_manager(own_ref)|<-'
+ * |<--------------------------|
+ * | |
+ * </pre>
+ *
+ * @param mgr スレーブマネージャ
* @return ReturnCode_t
*
* @else
@@ -417,7 +780,7 @@
* @brief Getting a slave manager
*
* This operation add a slave manager to this manager.
- *
+ *
* @param mgr A slave manager
* @return ReturnCode_t
*
@@ -427,11 +790,30 @@
/*!
* @if jp
- * @brief ¥¹¥ì¡¼¥Ö¥Þ¥Í¡¼¥¸¥ã¤Îºï½ü
+ * @brief スレーブマネージャの削除
*
- * ¤³¤Î¥Þ¥Í¡¼¥¸¥ã¤¬ÊÝ»ý¤¹¤ë¥Þ¥¹¥¿¤Î¤¦¤Á¡¢»ØÄꤵ¤ì¤¿¤â¤Î¤òºï½ü¤¹¤ë¡£
+ * このマネージャが保持するマスタのうち、指定されたものを削除する。
+ * 通常このオペレーションは、スレーブマネージャが終了する際に、自身
+ * に対して remove_master_manager() を呼び出した後、スレーブマネー
+ * ジャ自身がマスターマネージャの配下から外れることを知らせるための、
+ * この remove_slave_manager() をマスターマネージャに対して呼ぶこと
+ * で通知する。
*
- * @param mgr ¥¹¥ì¡¼¥Ö¥Þ¥Í¡¼¥¸¥ã
+ * <pre>
+ * [ master ] [ slave ]
+ * | |
+ * | |--, shutdown
+ * | | | slave manager
+ * | |<-'
+ * | |
+ * | |--,
+ * | | | remove_master_manager()
+ * | remove_slave_manager(own_ref) |<-'
+ * |<------------------------------|
+ * | |
+ * </pre>
+ *
+ * @param mgr スレーブマネージャ
* @return ReturnCode_t
*
* @else
@@ -438,44 +820,78 @@
* @brief Removing a slave manager
*
* This operation removes a slave manager from this manager.
- *
+ *
* @param mgr A slave manager
- * @return ReturnCode_t
+ * @return ReturnCode_t
*
* @endig
*/
RTC::ReturnCode_t remove_slave_manager(in Manager mgr);
+ // プロセス操作関係
+ /*!
+ * @if jp
+ * @brief マネージャプロセスをforkする
+ *
+ * @return Return Code
+ *
+ * @else
+ * @brief fork the manager process
+ *
+ * @return Return Code
+ *
+ * @endig
+ */
RTC::ReturnCode_t fork();
+
+ /*!
+ * @if jp
+ * @brief マネージャプロセスをshutdownする
+ *
+ * @return Return Code
+ *
+ * @else
+ * @brief shutdown the manager process
+ *
+ * @return Return Code
+ *
+ * @endig
+ */
RTC::ReturnCode_t shutdown();
+
+ /*!
+ * @if jp
+ * @brief マネージャプロセスを再起動する
+ *
+ * @return Return Code
+ *
+ * @else
+ * @brief restart maanger process
+ *
+ * @return Return Code
+ *
+ * @endig
+ */
RTC::ReturnCode_t restart();
-
- /*!
+ /*!
* @if jp
- * @brief »ØÄê̾¤ÎRTC¥ª¥Ö¥¸¥§¥¯¥È¥ê¥Õ¥¡¥ì¥ó¥¹¤ò¼èÆÀ
+ * @brief サービスのオブジェクト参照を取得する
*
- *
+ * 仕様未確定
*
- * @param name RTC̾
- * @return RTC¥ê¥¹¥È
+ * @return Return Code
*
* @else
- * @brief
+ * @brief obtaining the object reference of a service
*
+ * @return Return Code
*
- *
- * @param name name
- * @return list of RTC
- *
* @endig
*/
- RTC::RTCList get_components_by_name(in string name);
-
Object get_service(in string name);
// ServiceProfileList get_service_profiles();
};
-
}; // end of namespace RTM
#endif // __MANAGER_IDL__
More information about the openrtm-commit
mailing list