OpenRTM-aist  1.2.1
NamingManager.h
[詳解]
1 // -*- C++ -*-
19 #ifndef RTC_NAMINGMANAGER_H
20 #define RTC_NAMINGMANAGER_H
21 
22 #include <rtm/RTC.h>
23 
24 #include <coil/Task.h>
25 #include <coil/Mutex.h>
26 #include <coil/Guard.h>
27 #include <rtm/CorbaNaming.h>
28 #include <rtm/RTObject.h>
29 #include <rtm/SystemLogger.h>
30 #include <rtm/ManagerServant.h>
31 
32 namespace RTC
33 {
34  class Manager;
63  class NamingBase
64  {
65  typedef coil::Mutex Mutex;
66  typedef coil::Guard<Mutex> Guard;
67  public:
79  NamingBase() {};
80 
92  virtual ~NamingBase(void) {};
93 
112  virtual void bindObject(const char* name, const PortBase* port) = 0;
113  virtual void bindObject(const char* name, const RTObject_impl* rtobj) = 0;
114 
135  virtual void bindObject(const char* name,
136  const RTM::ManagerServant* mgr) = 0;
137 
155  virtual void unbindObject(const char* name) = 0;
156 
172  virtual bool isAlive() = 0;
190  virtual RTC::RTCList string_to_component(std::string name) = 0;
191  };
192 
201  {
202  public:
203  NamingService(const char* meth, const char* name, NamingBase* naming)
204  : method(meth), nsname(name), ns(naming)
205  {
206  }
207 
209  {
210  delete ns;
211  }
212 
213  std::string method;
214  std::string nsname;
216  };
217 
242  : public virtual NamingBase
243  {
244  public:
271  NamingOnCorba(CORBA::ORB_ptr orb, const char* names);
272 
284  virtual ~NamingOnCorba(void){};
285 
309  virtual void bindObject(const char* name, const RTObject_impl* rtobj);
310  virtual void bindObject(const char* name, const PortBase* port);
311 
329  virtual void bindObject(const char* name, const RTM::ManagerServant* mgr);
330 
350  virtual void unbindObject(const char* name);
351 
367  virtual bool isAlive();
388  void getComponentByName(CosNaming::NamingContext_ptr context, std::string name, RTC::RTCList& rtcs);
406  virtual RTC::RTCList string_to_component(std::string name);
407  CorbaNaming& getCorbaNaming() { return m_cosnaming; }
408 
409  private:
410  Logger rtclog;
411  CorbaNaming m_cosnaming;
412  std::string m_endpoint;
413  bool m_replaceEndpoint;
414  // std::map<std::string, RTObject_impl*> m_names;
415  };
416 
417 
418 
438  : public virtual NamingBase
439  {
440  public:
461  NamingOnManager(CORBA::ORB_ptr orb, Manager* mgr);
462 
474  virtual ~NamingOnManager(void){};
475 
499  virtual void bindObject(const char* name, const RTObject_impl* rtobj);
500  virtual void bindObject(const char* name, const PortBase* port);
501 
519  virtual void bindObject(const char* name, const RTM::ManagerServant* mgr);
520 
540  virtual void unbindObject(const char* name);
541 
557  virtual bool isAlive();
576  RTC::RTCList string_to_component(std::string name);
595  RTM::Manager_ptr getManager(std::string name);
596 
597  private:
598  Logger rtclog;
599  CORBA::ORB_ptr m_orb;
600  Manager* m_mgr;
601  // std::map<std::string, RTObject_impl*> m_names;
602  };
603 
628  {
629  typedef coil::Mutex Mutex;
630  typedef coil::Guard<Mutex> Guard;
631  public:
651  NamingManager(Manager* manager);
652 
664  virtual ~NamingManager(void);
665 
689  void registerNameServer(const char* method, const char* name_server);
690 
713  void bindObject(const char* name, const PortBase* port);
714  void bindObject(const char* name, const RTObject_impl* rtobj);
715 
739  void bindObject(const char* name, const RTM::ManagerServant* mgr);
740 
757  void update();
758 
778  void unbindObject(const char* name);
779 
795  void unbindAll();
796 
816  std::vector<RTObject_impl*> getObjects();
817  std::vector<NamingService*>& getNameServices() { return m_names; }
818 
841  RTCList string_to_component(std::string name);
842 
843  protected:
869  NamingBase* createNamingObj(const char* method, const char* name_server);
870 
890  void bindCompsTo(NamingBase* ns);
891 
913  void registerCompName(const char* name, const RTObject_impl* rtobj);
914 
936  void registerPortName(const char* name, const PortBase* port);
937 
960  void registerMgrName(const char* name, const RTM::ManagerServant* mgr);
961 
981  void unregisterCompName(const char* name);
982  void unregisterPortName(const char* name);
983 
1004  void unregisterMgrName(const char* name);
1005 
1025  void retryConnection(NamingService* ns);
1026 
1027 
1028 
1029  protected:
1030  // Name Servers' method/name and object
1038  std::vector<NamingService*> m_names;
1047 
1048  // Components' name and object
1056  struct Comps
1057  {
1058  Comps(const char* n, const RTObject_impl* obj)
1059  : name(n), rtobj(obj)
1060  {}
1061  std::string name;
1063  };
1071  struct Port
1072  {
1073  Port(const char* n, const PortBase* p)
1074  : name(n), port(p)
1075  {}
1076  std::string name;
1077  const PortBase* port;
1078  };
1086  struct Mgr
1087  {
1088  Mgr(const char* n, const RTM::ManagerServant* obj)
1089  : name(n), mgr(obj)
1090  {}
1091  std::string name;
1093  };
1101  std::vector<Comps*> m_compNames;
1117  std::vector<Port*> m_portNames;
1133  std::vector<Mgr*> m_mgrNames;
1142 
1151 
1160  }; // class NamingManager
1161 }; // namespace RTC
1162 
1163 #endif // RTC_NAMINGMANAGER_H
virtual RTC::RTCList string_to_component(std::string name)=0
rtcloc形式でRTCのオブジェクトリファレンスを取得する
virtual ~NamingOnCorba(void)
デストラクタ
Definition: NamingManager.h:284
const RTM::ManagerServant * mgr
Definition: NamingManager.h:1092
Comps(const char *n, const RTObject_impl *obj)
Definition: NamingManager.h:1058
RTコンポーネント
std::string name
Definition: NamingManager.h:1061
std::string method
Definition: NamingManager.h:213
std::vector< Mgr * > m_mgrNames
ManagerServantリスト
Definition: NamingManager.h:1133
Port(const char *n, const PortBase *p)
Definition: NamingManager.h:1073
std::vector< Comps * > m_compNames
コンポーネントリスト
Definition: NamingManager.h:1101
std::string name
Definition: NamingManager.h:1091
Mutex クラス
Definition: Mutex.h:40
RT component logger class.
Manager * m_manager
マネージャオブジェクト
Definition: NamingManager.h:1150
Mgr(const char *n, const RTM::ManagerServant *obj)
Definition: NamingManager.h:1088
ManagerのCORBA化クラス
Definition: ManagerServant.h:63
NameServer 管理用構造体
Definition: NamingManager.h:200
Mutex m_mgrNamesMutex
ManagerServantリストのmutex.
Definition: NamingManager.h:1141
RTコンポーネントクラス
Definition: RTObject.h:89
Manager クラス
Definition: Manager.h:81
Mutex m_compNamesMutex
コンポーネントリストのmutex
Definition: NamingManager.h:1109
virtual bool isAlive()=0
ネームサーバの生存を確認する。
コンポーネント管理用構造体
Definition: NamingManager.h:1071
std::vector< Port * > m_portNames
コンポーネントリスト
Definition: NamingManager.h:1117
ManagerServant管理用構造体
Definition: NamingManager.h:1086
CORBA Naming Service ヘルパークラス
Definition: CorbaNaming.h:89
NamingService 管理用抽象クラス
Definition: NamingManager.h:63
CorbaNaming & getCorbaNaming()
Definition: NamingManager.h:407
Mutex m_namesMutex
NameServer リストのmutex.
Definition: NamingManager.h:1046
CORBA naming service helper class.
Port の基底クラス
Definition: PortBase.h:135
NamingService(const char *meth, const char *name, NamingBase *naming)
Definition: NamingManager.h:203
Guard template class.
RTComponent manager servant implementation class.
NamingBase()
コンストラクタ
Definition: NamingManager.h:79
std::vector< NamingService * > & getNameServices()
Definition: NamingManager.h:817
virtual void bindObject(const char *name, const PortBase *port)=0
指定したオブジェクトをNamingServiceへバインドする純粋仮想関数
virtual ~NamingOnManager(void)
デストラクタ
Definition: NamingManager.h:474
Logger クラス
Definition: SystemLogger.h:99
std::vector< NamingService * > m_names
NameServer リスト
Definition: NamingManager.h:1038
const RTObject_impl * rtobj
Definition: NamingManager.h:1062
Manager 用 NamingServer 管理クラス
Definition: NamingManager.h:437
コンポーネント管理用構造体
Definition: NamingManager.h:1056
virtual ~NamingBase(void)
デストラクタ
Definition: NamingManager.h:92
~NamingService()
Definition: NamingManager.h:208
Logger rtclog
ロガーストリーム
Definition: NamingManager.h:1159
NamingBase * ns
Definition: NamingManager.h:215
RTComponent header.
CORBA 用 NamingServer 管理クラス
Definition: NamingManager.h:241
std::string name
Definition: NamingManager.h:1076
Guard テンプレートクラス
Definition: Guard.h:41
NamingServer 管理クラス
Definition: NamingManager.h:627
std::string nsname
Definition: NamingManager.h:214
Mutex m_portNamesMutex
コンポーネントリストのmutex
Definition: NamingManager.h:1125
const PortBase * port
Definition: NamingManager.h:1077
RT component base class.
virtual void unbindObject(const char *name)=0
指定したオブジェクトをNamingServiceからアンバインドするための 純粋仮想関数