OpenRTM-aist  2.1.0
ManagerServant.h
Go to the documentation of this file.
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 class.
Definition: SystemLogger.h:101
Manager class.
Definition: Manager.h:91
static Manager & instance()
Get instance of the manager.
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 class.
Definition: ManagerServant.h:66
RTC::ReturnCode_t remove_master_manager(RTM::Manager_ptr mgr) override
Removing a master manager.
RTC::ReturnCode_t remove_slave_manager(RTM::Manager_ptr mgr) override
Removing a slave manager.
RTM::Manager_ptr findManager(const std::string &host_port)
Find the reference of Manager.
RTC::RTObject_ptr create_component(const char *module_name) override
Creating an RT-Component.
RTC::ComponentProfileList * get_component_profiles() override
Getting RT-Component's profile list running on this manager.
RTM::ModuleProfileList * get_factory_profiles() override
Getting component factory profiles.
RTC::ReturnCode_t add_master_manager(RTM::Manager_ptr mgr) override
Getting a master manager.
~ManagerServant() override
Virtual destructor.
RTM::Manager_ptr getObjRef() const
Get the reference of Manager.
std::string getParameterByModulename(const std::string &param_name, std::string &module_name)
::CORBA::Boolean is_master() override
Whether this manager is master or not.
RTC::ReturnCode_t restart() override
This method restarts RTC.
RTC::ReturnCode_t set_configuration(const char *name, const char *value) override
Setting manager's configuration.
RTC::ReturnCode_t shutdown() override
This method shutdowns RTC.
RTC::RTObject_ptr createComponentByAddress(std::string &create_arg, std::string &mgrstr)
RTC::RTCList * get_components_by_name(const char *name) override
bool createINSManager()
Generate INSManager.
RTM::ManagerList * get_master_managers() override
Getting master managers.
RTM::ManagerProfile * get_profile() override
Getting this manager's profile.
RTC::ReturnCode_t load_module(const char *pathname, const char *initfunc) override
Loading a module.
CORBA::Object_ptr get_service(const char *name) override
Get the reference of RTC.
RTM::ModuleProfileList * get_loaded_modules() override
Getting loaded module profiles.
RTC::RTObject_ptr createComponentByManagerName(std::string &create_arg, std::string &mgrstr)
Launch RTC on specified manager.
RTC::ReturnCode_t delete_component(const char *instance_name) override
Deleting an RT-Component.
RTM::NVList * get_configuration() override
Getting this manager's configuration.
ManagerServant()
Constructor.
RTM::ModuleProfileList * get_loadable_modules() override
Getting loadable module profiles.
RTM::ManagerList * get_slave_managers() override
Getting slave managers.
RTM::Manager_ptr findManagerByName(const std::string &mgr_name)
Obtain Manager's reference by name.
RTM::Manager_ptr findManagerFromList(const std::string &name, RTM::ManagerList &mlist)
Obtain Manager's reference by name.
static bool isProcessIDManager(const std::string &mgrname)
RTC::ReturnCode_t unload_module(const char *pathname) override
Unloading a module.
RTC::ReturnCode_t add_slave_manager(RTM::Manager_ptr mgr) override
Getting a slave manager.
RTC::ReturnCode_t fork() override
The copy of the process is generated.
RTC::RTCList * get_components() override
Getting RT-Component list running on this manager.
RT-Middleware.
Definition: FactoryInit.h:22