OpenRTM-aist  2.1.0
ManagerServant.h
[詳解]
1 // -*- C++ -*-
20 #ifndef RTM_MANAGERSERVANT_H
21 #define RTM_MANAGERSERVANT_H
22 
23 #include <mutex>
24 #include <rtm/idl/ManagerSkel.h>
25 #include <rtm/Manager.h>
26 #include <rtm/SystemLogger.h>
27 
28 #include <iostream>
29 
45 namespace RTM
46 {
64  : public virtual POA_RTM::Manager,
65  public virtual PortableServer::RefCountServantBase
66  {
67  public:
81  // standard constructor
83 
95  ~ManagerServant() override;
96 
121  RTC::ReturnCode_t load_module(const char* pathname, const char* initfunc) override;
122 
142  RTC::ReturnCode_t unload_module(const char* pathname) override;
143 
161  RTM::ModuleProfileList* get_loadable_modules() override;
162 
180  RTM::ModuleProfileList* get_loaded_modules() override;
181 
182  // component 関連
202  RTM::ModuleProfileList* get_factory_profiles() override;
203 
222  RTC::RTObject_ptr create_component(const char* module_name) override;
223 
242  RTC::ReturnCode_t delete_component(const char* instance_name) override;
243 
261  RTC::RTCList* get_components() override;
262 
282  RTC::ComponentProfileList* get_component_profiles() override;
283 
284  // manager 基本
302  RTM::ManagerProfile* get_profile() override;
303 
321  RTM::NVList* get_configuration() override;
322 
344  RTC::ReturnCode_t set_configuration(const char* name, const char* value) override;
345 
365  ::CORBA::Boolean is_master() override;
366 
388  RTM::ManagerList* get_master_managers() override;
389 
413  RTC::ReturnCode_t add_master_manager(RTM::Manager_ptr mgr) override;
414 
434  RTC::ReturnCode_t remove_master_manager(RTM::Manager_ptr mgr) override;
435 
457  RTM::ManagerList* get_slave_managers() override;
458 
478  RTC::ReturnCode_t add_slave_manager(RTM::Manager_ptr mgr) override;
479 
499  RTC::ReturnCode_t remove_slave_manager(RTM::Manager_ptr mgr) override;
500 
510  RTC::ReturnCode_t fork() override;
520  RTC::ReturnCode_t shutdown() override;
530  RTC::ReturnCode_t restart() override;
531 
547  RTC::RTCList* get_components_by_name(const char* name) override;
548 
558  CORBA::Object_ptr get_service(const char* name) override;
559 
569  RTM::Manager_ptr getObjRef() const;
570 
581 
591  RTM::Manager_ptr findManager(const std::string& host_port);
592 
614  RTM::Manager_ptr findManagerByName(const std::string& mgr_name);
615 
644  RTM::Manager_ptr findManagerFromList(const std::string& name,
645  RTM::ManagerList& mlist);
646 
669  RTC::RTObject_ptr
670  createComponentByManagerName(std::string& create_arg, std::string& mgrstr);
671 
672  /*
673  * @if jp
674  * @brief 指定アドレスのマネージャでRTCを起動する
675  *
676  * comp&manager_address=localhost:2810 のようにRTC名
677  * &manager_address=マネージャのホスト名、ポート番号を指定する
678  *
679  * @param module_name 起動するRTC、マネージャのホストアドレス
680  * @return 生成されたRTCのオブジェクト参照
681  *
682  * @else
683  * @brief Launch a RTC on the specified IP/Port address manager
684  *
685  * @param module_name Given parameter to create RTC
686  * @return created RTObject object reference
687  *
688  * @endif
689  */
690  RTC::RTObject_ptr
691  createComponentByAddress(std::string& create_arg, std::string& mgrstr);
692 
693  /*
694  * @if jp
695  * @brief マスターマネージャの有無を確認してリストを更新する
696  *
697  *
698  *
699  * @else
700  * @brief
701  *
702  *
703  * @endif
704  */
706  /*
707  * @if jp
708  * @brief create引数から指定されたキーの値を返す
709  *
710  * create引数から指定されたキーを値を返すとともに、そのキーと値を削除した引
711  * 数を返す。
712  * module_name: module_name?param1=value1&param2=value2&param3...
713  * param_name: param2
714  * の場合
715  * 返り値: value2
716  * module_name: module_name?param1=value1&param3...
717  * となる。
718  *
719  * @else @brief returns value of specified param_name from create arg
720  *
721  * This function returns the value of specified param_name from
722  * create argument, and delete param_name=value from the create
723  * arg string. If the arguments are
724  * module_name: module_name?param1=value1&param2=value2&param3...
725  * param_name: param2
726  * this function returns
727  * ret value: value2
728  * module_name: module_name?param1=value1&param3...
729  *
730  * @endif
731  */
732  std::string getParameterByModulename(const std::string& param_name, std::string &module_name);
733  static bool isProcessIDManager(const std::string& mgrname);
734 
735  private:
743  ::RTC::Logger rtclog{"ManagerServant"};
744 
753 
761  ::RTM::Manager_var m_objref{RTM::Manager::_nil()};
762 
770  ::RTM::ManagerList m_masters;
771 
779  ::std::mutex m_masterMutex;
780 
788  ::RTM::ManagerList m_slaves;
789 
797  ::std::mutex m_slaveMutex;
798 
806  CORBA::Boolean m_isMaster{false};
807 
815  class is_equiv
816  {
817  RTM::Manager_var m_mgr;
818  public:
819 
820  is_equiv(RTM::Manager_ptr mgr)
821  : m_mgr(RTM::Manager::_duplicate(mgr)) {}
822 #ifdef ORB_IS_ORBEXPRESS
823  bool operator()(RTM::Manager_var mgr)
824  {
825  return m_mgr->_is_equivalent(mgr.in());
826  }
827 #else
828  bool operator()(RTM::Manager_ptr mgr)
829  {
830  return m_mgr->_is_equivalent(mgr);
831  }
832 #endif
833  };
834 
835 
836  };
837 
838 
839  class CompParam
840  {
841  public:
842  CompParam(std::string module_name);
844  static const unsigned int prof_list_size = 6;
845  static const char* prof_list[prof_list_size];
846  std::string vendor();
847  std::string category();
848  std::string impl_id();
849  std::string language();
850  std::string version();
851  private:
852  std::string m_type;
853  std::string m_vendor;
854  std::string m_category;
855  std::string m_impl_id;
856  std::string m_language;
857  std::string m_version;
858 
859  };
860 
861 } // namespace RTM
862 #endif // RTM_MANAGERSERVANT_H
-*- C++ -*-
RT component logger class
Logger クラス
Definition: SystemLogger.h:101
Manager クラス
Definition: Manager.h:91
static Manager & instance()
マネージャのインスタンスの取得
Definition: ManagerServant.h:840
std::string impl_id()
static const unsigned int prof_list_size
Definition: ManagerServant.h:844
std::string vendor()
std::string category()
static const char * prof_list[prof_list_size]
Definition: ManagerServant.h:845
CompParam(std::string module_name)
std::string language()
std::string version()
ManagerのCORBA化クラス
Definition: ManagerServant.h:66
RTC::ReturnCode_t remove_master_manager(RTM::Manager_ptr mgr) override
マスターマネージャの削除
RTC::ReturnCode_t remove_slave_manager(RTM::Manager_ptr mgr) override
スレーブマネージャの削除
RTM::Manager_ptr findManager(const std::string &host_port)
Managerのリファレンスを検索する。
RTC::RTObject_ptr create_component(const char *module_name) override
コンポーネントを生成する
RTC::ComponentProfileList * get_component_profiles() override
起動中のコンポーネントプロファイルのリストを取得する
RTM::ModuleProfileList * get_factory_profiles() override
コンポーネントファクトリのプロファイルを取得する
RTC::ReturnCode_t add_master_manager(RTM::Manager_ptr mgr) override
マスターマネージャの追加
~ManagerServant() override
仮想デストラクタ
RTM::Manager_ptr getObjRef() const
Managerのリファレンスを取得する。
std::string getParameterByModulename(const std::string &param_name, std::string &module_name)
::CORBA::Boolean is_master() override
マネージャがマスターかどうか
RTC::ReturnCode_t restart() override
再起動する。
RTC::ReturnCode_t set_configuration(const char *name, const char *value) override
マネージャのコンフィギュレーションを設定する
RTC::ReturnCode_t shutdown() override
shutdownする
RTC::RTObject_ptr createComponentByAddress(std::string &create_arg, std::string &mgrstr)
RTC::RTCList * get_components_by_name(const char *name) override
指定名のRTCオブジェクトリファレンスを取得
bool createINSManager()
INSManagerの生成
RTM::ManagerList * get_master_managers() override
マスターマネージャの取得
RTM::ManagerProfile * get_profile() override
マネージャのプロファイルを取得する
RTC::ReturnCode_t load_module(const char *pathname, const char *initfunc) override
Loading a module
CORBA::Object_ptr get_service(const char *name) override
RTCのリファレンスを取得する。
RTM::ModuleProfileList * get_loaded_modules() override
ロード済みのモジュールのプロファイルを取得する
RTC::RTObject_ptr createComponentByManagerName(std::string &create_arg, std::string &mgrstr)
指定のマネージャでRTCを起動する
RTC::ReturnCode_t delete_component(const char *instance_name) override
コンポーネントを削除する
RTM::NVList * get_configuration() override
マネージャのコンフィギュレーションを取得する
ManagerServant()
コンストラクタ
RTM::ModuleProfileList * get_loadable_modules() override
ロード可能なモジュールのプロファイルを取得する
RTM::ManagerList * get_slave_managers() override
スレーブマネージャの取得
RTM::Manager_ptr findManagerByName(const std::string &mgr_name)
指定名のマネージャを取得
RTM::Manager_ptr findManagerFromList(const std::string &name, RTM::ManagerList &mlist)
マネージャのリストから指定名を持つマネージャを取得
static bool isProcessIDManager(const std::string &mgrname)
RTC::ReturnCode_t unload_module(const char *pathname) override
モジュールをアンロードする
RTC::ReturnCode_t add_slave_manager(RTM::Manager_ptr mgr) override
スレーブマネージャの追加
RTC::ReturnCode_t fork() override
プロセスのコピーを生成する
RTC::RTCList * get_components() override
起動中のコンポーネントのリストを取得する
RT-Middleware
Definition: FactoryInit.h:22