OpenRTM-aist  2.1.0
NamingManager.h
Go to the documentation of this file.
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 <mutex>
26 #include <rtm/CorbaNaming.h>
27 #include <rtm/RTObject.h>
28 #include <rtm/SystemLogger.h>
29 #include <rtm/ManagerServant.h>
30 
31 #include <string>
32 #include <vector>
33 
34 namespace RTC
35 {
36  class Manager;
65  class NamingBase
66  {
67  public:
79  NamingBase() = default;
80 
92  virtual ~NamingBase() = default;
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  ~NamingOnCorba() override = default;
285 
309  void bindObject(const char* name, const RTObject_impl* rtobj) override;
310  void bindObject(const char* name, const PortBase* port) override;
311 
329  void bindObject(const char* name, const RTM::ManagerServant* mgr) override;
330 
350  void unbindObject(const char* name) override;
351 
367  bool isAlive() override;
388  void getComponentByName(CosNaming::NamingContext_ptr context, const std::string& name, RTC::RTCList& rtcs);
406  RTC::RTCList string_to_component(std::string name) override;
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  };
415 
416 
417 
437  : public virtual NamingBase
438  {
439  public:
460  NamingOnManager(CORBA::ORB_ptr orb, Manager* mgr);
461 
473  ~NamingOnManager() override = default;
474 
498  void bindObject(const char* name, const RTObject_impl* rtobj) override;
499  void bindObject(const char* name, const PortBase* port) override;
500 
518  void bindObject(const char* name, const RTM::ManagerServant* mgr) override;
519 
539  void unbindObject(const char* name) override;
540 
556  bool isAlive() override;
575  RTC::RTCList string_to_component(std::string name) override;
594  RTM::Manager_ptr getManager(const std::string& name);
595 
596  private:
597  Logger rtclog;
598  CORBA::ORB_ptr m_orb;
599  Manager* m_mgr;
600  };
601 
626  {
627  public:
647  explicit NamingManager(Manager* manager);
648 
660  virtual ~NamingManager();
661 
685  void registerNameServer(const char* method, const char* name_server);
686 
709  void bindObject(const char* name, const PortBase* port);
710  void bindObject(const char* name, const RTObject_impl* rtobj);
711 
735  void bindObject(const char* name, const RTM::ManagerServant* mgr);
736 
753  void update();
754 
774  void unbindObject(const char* name);
775 
791  void unbindAll();
792 
812  std::vector<RTObject_impl*> getObjects();
813  std::vector<NamingService*>& getNameServices() { return m_names; }
814 
837  RTCList string_to_component(const std::string& name);
838 
839  protected:
865  NamingBase* createNamingObj(const char* method, const char* name_server);
866 
887 
909  void registerCompName(const char* name, const RTObject_impl* rtobj);
910 
932  void registerPortName(const char* name, const PortBase* port);
933 
956  void registerMgrName(const char* name, const RTM::ManagerServant* mgr);
957 
977  void unregisterCompName(const char* name);
978  void unregisterPortName(const char* name);
979 
1000  void unregisterMgrName(const char* name);
1001 
1022 
1023 
1024 
1025  protected:
1026  // Name Servers' method/name and object
1034  std::vector<NamingService*> m_names;
1042  std::mutex m_namesMutex;
1043 
1044  // Components' name and object
1052  struct Comps
1053  {
1054  Comps(const char* n, const RTObject_impl* obj)
1055  : name(n), rtobj(obj)
1056  {}
1057  std::string name;
1059  };
1067  struct Port
1068  {
1069  Port(const char* n, const PortBase* p)
1070  : name(n), port(p)
1071  {}
1072  std::string name;
1073  const PortBase* port;
1074  };
1082  struct Mgr
1083  {
1084  Mgr(const char* n, const RTM::ManagerServant* obj)
1085  : name(n), mgr(obj)
1086  {}
1087  std::string name;
1089  };
1097  std::vector<Comps*> m_compNames;
1105  std::mutex m_compNamesMutex;
1113  std::vector<Port*> m_portNames;
1121  std::mutex m_portNamesMutex;
1129  std::vector<Mgr*> m_mgrNames;
1137  std::mutex m_mgrNamesMutex;
1138 
1147 
1156  }; // class NamingManager
1157 } // namespace RTC
1158 
1159 #endif // RTC_NAMINGMANAGER_H
CORBA naming service helper class.
RTComponent manager servant implementation class.
RTComponent header.
RT component base class.
RT component logger class.
CORBA Naming Service helper class.
Definition: CorbaNaming.h:86
Logger class.
Definition: SystemLogger.h:101
Manager class.
Definition: Manager.h:91
NamingService management abstract class.
Definition: NamingManager.h:66
virtual void bindObject(const char *name, const PortBase *port)=0
Pure virtual function to bind the specified objects to the NamingService.
virtual void bindObject(const char *name, const RTM::ManagerServant *mgr)=0
Pure virtual function to bind the specified ManagerServants to NamingService.
virtual RTC::RTCList string_to_component(std::string name)=0
virtual void unbindObject(const char *name)=0
Pure virtual function to unbind the specified objects from NamingService.
virtual ~NamingBase()=default
Destructor.
NamingBase()=default
Constructor.
virtual void bindObject(const char *name, const RTObject_impl *rtobj)=0
virtual bool isAlive()=0
Check if the name service is alive.
NamingServer management class.
Definition: NamingManager.h:626
std::vector< RTObject_impl * > getObjects()
Get all bound objects.
void unregisterCompName(const char *name)
Unregister the components that will be registered to NameServer.
void update()
Update information of NamingServer.
std::vector< Comps * > m_compNames
Component list.
Definition: NamingManager.h:1097
void bindObject(const char *name, const PortBase *port)
Bind the specified objects to NamingService.
NamingManager(Manager *manager)
Constructor.
void registerCompName(const char *name, const RTObject_impl *rtobj)
Configure the components that will be registered to NameServer.
NamingBase * createNamingObj(const char *method, const char *name_server)
Create objects for NameServer management.
void unbindObject(const char *name)
Unbind the specified objects from NamingService.
std::mutex m_compNamesMutex
Mutex of Component list.
Definition: NamingManager.h:1105
std::mutex m_portNamesMutex
Mutex of Port list.
Definition: NamingManager.h:1121
void registerMgrName(const char *name, const RTM::ManagerServant *mgr)
Configure the ManagerServants that will be registered to NameServer.
std::vector< Port * > m_portNames
Component list.
Definition: NamingManager.h:1113
std::vector< NamingService * > & getNameServices()
Definition: NamingManager.h:813
Logger rtclog
Logger stream.
Definition: NamingManager.h:1155
RTCList string_to_component(const std::string &name)
registerMgrName
void bindCompsTo(NamingBase *ns)
Register the configured component to NameServer.
virtual ~NamingManager()
Destructor.
void unregisterMgrName(const char *name)
Unregister the ManagerServants that will be registered to NameServer.
std::mutex m_namesMutex
Mutex of NameServer list.
Definition: NamingManager.h:1042
void retryConnection(NamingService *ns)
Rebind the component to NameServer.
std::vector< NamingService * > m_names
NameServer list.
Definition: NamingManager.h:1034
void registerNameServer(const char *method, const char *name_server)
Regster the NameServer.
Manager * m_manager
Manager object.
Definition: NamingManager.h:1146
void registerPortName(const char *name, const PortBase *port)
Configure the components that will be registered to NameServer.
std::vector< Mgr * > m_mgrNames
ManagerServant list.
Definition: NamingManager.h:1129
void unbindAll()
Unbind all objects from NamingService.
void bindObject(const char *name, const RTObject_impl *rtobj)
void unregisterPortName(const char *name)
void bindObject(const char *name, const RTM::ManagerServant *mgr)
Bind the specified ManagerServants to NamingService.
std::mutex m_mgrNamesMutex
Mutex of ManagerServant list.
Definition: NamingManager.h:1137
NamingServer management class for CORBA.
Definition: NamingManager.h:243
void unbindObject(const char *name) override
Unbind the specified CORBA objects from NamingService.
bool isAlive() override
Check if the name service is alive.
void bindObject(const char *name, const RTM::ManagerServant *mgr) override
Bind the specified ManagerServants to NamingService.
~NamingOnCorba() override=default
Destructor.
CorbaNaming & getCorbaNaming()
Definition: NamingManager.h:407
void getComponentByName(CosNaming::NamingContext_ptr context, const std::string &name, RTC::RTCList &rtcs)
void bindObject(const char *name, const PortBase *port) override
Pure virtual function to bind the specified objects to the NamingService.
NamingOnCorba(CORBA::ORB_ptr orb, const char *names)
Constructor.
RTC::RTCList string_to_component(std::string name) override
void bindObject(const char *name, const RTObject_impl *rtobj) override
Bind the specified CORBA objects to NamingService.
Definition: NamingManager.h:438
void bindObject(const char *name, const PortBase *port) override
Pure virtual function to bind the specified objects to the NamingService.
RTC::RTCList string_to_component(std::string name) override
bool isAlive() override
Check if the name service is alive.
void unbindObject(const char *name) override
Unbind the specified CORBA objects from NamingService.
~NamingOnManager() override=default
Destructor.
NamingOnManager(CORBA::ORB_ptr orb, Manager *mgr)
Constructor.
void bindObject(const char *name, const RTObject_impl *rtobj) override
Bind the specified CORBA objects to NamingService.
void bindObject(const char *name, const RTM::ManagerServant *mgr) override
Bind the specified ManagerServants to NamingService.
RTM::Manager_ptr getManager(const std::string &name)
Structure for NameServer management.
Definition: NamingManager.h:201
NamingBase * ns
Definition: NamingManager.h:215
NamingService(const char *meth, const char *name, NamingBase *naming)
Definition: NamingManager.h:203
~NamingService()
Definition: NamingManager.h:208
std::string nsname
Definition: NamingManager.h:214
std::string method
Definition: NamingManager.h:213
Port base class.
Definition: PortBase.h:132
RT-Component class.
Definition: RTObject.h:93
Manager CORBA class.
Definition: ManagerServant.h:66
RT-Component.
Structure for component management.
Definition: NamingManager.h:1053
std::string name
Definition: NamingManager.h:1057
Comps(const char *n, const RTObject_impl *obj)
Definition: NamingManager.h:1054
const RTObject_impl * rtobj
Definition: NamingManager.h:1058
Structure for ManagerServant management.
Definition: NamingManager.h:1083
const RTM::ManagerServant * mgr
Definition: NamingManager.h:1088
std::string name
Definition: NamingManager.h:1087
Mgr(const char *n, const RTM::ManagerServant *obj)
Definition: NamingManager.h:1084
Structure for component management.
Definition: NamingManager.h:1068
const PortBase * port
Definition: NamingManager.h:1073
Port(const char *n, const PortBase *p)
Definition: NamingManager.h:1069
std::string name
Definition: NamingManager.h:1072