00001
00019 #ifndef NamingManager_h
00020 #define NamingManager_h
00021
00022 #include <rtm/RTC.h>
00023
00024 #include <ace/Task.h>
00025 #include <rtm/CorbaNaming.h>
00026 #include <rtm/RTObject.h>
00027 #include <rtm/SystemLogger.h>
00028
00029 namespace RTC
00030 {
00031 class Manager;
00060 class NamingBase
00061 {
00062 public:
00074 NamingBase() {};
00075
00087 virtual ~NamingBase() {};
00088
00107 virtual void bindObject(const char* name, const RTObject_impl* rtobj) = 0;
00108
00126 virtual void unbindObject(const char* name) = 0;
00127 };
00128
00152 class NamingOnCorba
00153 : public virtual NamingBase
00154 {
00155 public:
00177 NamingOnCorba(CORBA::ORB_ptr orb, const char* names)
00178 : m_cosnaming(orb, names)
00179 {};
00180
00192 virtual ~NamingOnCorba(){};
00193
00217 virtual void bindObject(const char* name, const RTObject_impl* rtobj);
00218
00238 virtual void unbindObject(const char* name);
00239
00240 private:
00241 CorbaNaming m_cosnaming;
00242 std::map<std::string, RTObject_impl*> m_names;
00243 };
00244
00268 class NamingManager
00269 {
00270 public:
00290 NamingManager(Manager* manager);
00291
00303 virtual ~NamingManager();
00304
00328 void registerNameServer(const char* method, const char* name_server);
00329
00351 void bindObject(const char* name, const RTObject_impl* rtobj);
00352
00369 void update();
00370
00390 void unbindObject(const char* name);
00391
00407 void unbindAll();
00408
00428 std::vector<RTObject_impl*> getObjects();
00429
00430 protected:
00456 NamingBase* createNamingObj(const char* method, const char* name_server);
00457
00477 void bindCompsTo(NamingBase* ns);
00478
00500 void registerCompName(const char* name, const RTObject_impl* rtobj);
00501
00521 void unregisterCompName(const char* name);
00522
00523 protected:
00524
00532 struct Names
00533 {
00534 Names(const char* meth, const char* name, NamingBase* naming)
00535 : method(meth), nsname(name), ns(naming)
00536 {
00537 }
00538 std::string method;
00539 std::string nsname;
00540 NamingBase* ns;
00541 };
00549 std::vector<Names*> m_names;
00550 ACE_Thread_Mutex m_namesMutex;
00551
00552
00560 struct Comps
00561 {
00562 Comps(const char* n, const RTObject_impl* obj)
00563 : name(n), rtobj(obj)
00564 {}
00565 std::string name;
00566 const RTObject_impl* rtobj;
00567 };
00575 std::vector<Comps*> m_compNames;
00576 ACE_Thread_Mutex m_compNamesMutex;
00577
00585 Manager* m_manager;
00586
00594 MedLogbuf m_MedLogbuf;
00595
00603 LogStream rtcout;
00604 };
00605 };
00606
00607 #endif // NamingManager_h