00001 // -*- C++ -*- 00019 /* 00020 * $Log: NamingManager.h,v $ 00021 * Revision 1.1 2006/11/04 21:11:44 n-ando 00022 * NamingManager was introduced to support multiple name server. 00023 * 00024 */ 00025 #ifndef NamingManager_h 00026 #define NamingManager_h 00027 00028 #include <rtm/CorbaNaming.h> 00029 #include <rtm/RTObject.h> 00030 00031 00032 namespace RTC 00033 { 00034 class NamingBase 00035 { 00036 public: 00037 NamingBase() {}; 00038 virtual ~NamingBase() {}; 00039 virtual void bindObject(const char* name, const RTObject_impl* rtobj) = 0; 00040 virtual void unbindObject(const char* name) = 0; 00041 }; 00042 00043 00044 00045 class NamingOnCorba 00046 : public virtual NamingBase 00047 { 00048 public: 00049 NamingOnCorba(CORBA::ORB_ptr orb, const char* names) 00050 : m_cosnaming(orb, names) 00051 {}; 00052 virtual ~NamingOnCorba(){}; 00053 00054 virtual void bindObject(const char* name, const RTObject_impl* rtobj); 00055 00056 virtual void unbindObject(const char* name); 00057 00058 private: 00059 CorbaNaming m_cosnaming; 00060 }; 00061 00062 class NamingManager 00063 { 00064 public: 00065 NamingManager(){}; 00066 NamingManager(Properties& prop){}; 00067 ~NamingManager(){}; 00068 00069 void registerNaming(NamingBase* names); 00070 00071 void bindObject(const char* name, const RTObject_impl* rtobj); 00072 void unbindObject(const char* name); 00073 00074 protected: 00075 std::vector<NamingBase*> m_namings; 00076 00077 struct binder 00078 { 00079 binder(const char* name, const RTObject_impl* rtobj) 00080 : m_name(name), m_obj(rtobj) {}; 00081 void operator()(NamingBase* naming) 00082 { 00083 naming->bindObject(m_name, m_obj); 00084 } 00085 const char* m_name; 00086 const RTObject_impl* m_obj; 00087 }; 00088 00089 struct unbinder 00090 { 00091 unbinder(const char* name) : m_name(name) {}; 00092 void operator()(NamingBase* naming) 00093 { 00094 naming->unbindObject(m_name); 00095 } 00096 const char* m_name; 00097 }; 00098 00099 }; // class NamingManager 00100 00101 00102 00103 }; // namespace RTC 00104 00105 #endif // NamingManager_h