00001
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef NamingManager_h
00032 #define NamingManager_h
00033
00034 #include <rtm/RTC.h>
00035
00036 #include <ace/Task.h>
00037 #include <rtm/CorbaNaming.h>
00038 #include <rtm/RTObject.h>
00039 #include <rtm/SystemLogger.h>
00040
00041
00042 namespace RTC
00043 {
00044 class Manager;
00045 class NamingBase
00046 {
00047 public:
00048 NamingBase() {};
00049 virtual ~NamingBase() {};
00050 virtual void bindObject(const char* name, const RTObject_impl* rtobj) = 0;
00051 virtual void unbindObject(const char* name) = 0;
00052 };
00053
00054
00055
00056 class NamingOnCorba
00057 : public virtual NamingBase
00058 {
00059 public:
00060 NamingOnCorba(CORBA::ORB_ptr orb, const char* names)
00061 : m_cosnaming(orb, names)
00062 {};
00063 virtual ~NamingOnCorba(){};
00064
00065 virtual void bindObject(const char* name, const RTObject_impl* rtobj);
00066
00067 virtual void unbindObject(const char* name);
00068
00069
00070
00071 private:
00072 CorbaNaming m_cosnaming;
00073 std::map<std::string, RTObject_impl*> m_names;
00074 };
00075
00076
00077
00078
00079 class NamingManager
00080 {
00081 public:
00082 NamingManager(Manager* manager);
00083 virtual ~NamingManager();
00084
00085 void registerNameServer(const char* method, const char* name_server);
00086 void bindObject(const char* name, const RTObject_impl* rtobj);
00087 void update();
00088 void unbindObject(const char* name);
00089 void unbindAll();
00090 std::vector<RTObject_impl*> getObjects();
00091
00092 protected:
00093 NamingBase* createNamingObj(const char* method, const char* name_server);
00094 void bindCompsTo(NamingBase* ns);
00095 void registerCompName(const char* name, const RTObject_impl* rtobj);
00096 void unregisterCompName(const char* name);
00097
00098
00099 protected:
00100
00101 struct Names
00102 {
00103 Names(const char* meth, const char* name, NamingBase* naming)
00104 : method(meth), nsname(name), ns(naming)
00105 {
00106 }
00107 std::string method;
00108 std::string nsname;
00109 NamingBase* ns;
00110 };
00111 std::vector<Names*> m_names;
00112 ACE_Thread_Mutex m_namesMutex;
00113
00114
00115 struct Comps
00116 {
00117 Comps(const char* n, const RTObject_impl* obj)
00118 : name(n), rtobj(obj)
00119 {}
00120 std::string name;
00121 const RTObject_impl* rtobj;
00122 };
00123 std::vector<Comps*> m_compNames;
00124 ACE_Thread_Mutex m_compNamesMutex;
00125
00126 Manager* m_manager;
00127 MedLogbuf m_MedLogbuf;
00128 LogStream rtcout;
00129 };
00130
00131
00132 };
00133
00134 #endif // NamingManager_h