NamingManager.h

説明を見る。
00001 // -*- C++ -*-
00019 #ifndef NamingManager_h
00020 #define NamingManager_h
00021 
00022 #include <rtm/RTC.h>
00023 
00024 #include <coil/Task.h>
00025 #include <coil/Mutex.h>
00026 #include <coil/Guard.h>
00027 #include <rtm/CorbaNaming.h>
00028 #include <rtm/RTObject.h>
00029 #include <rtm/SystemLogger.h>
00030 #include <rtm/ManagerServant.h>
00031 
00032 namespace RTC
00033 {
00034   class Manager;
00063   class NamingBase
00064   {
00065     typedef coil::Mutex Mutex;
00066     typedef coil::Guard<Mutex> Guard;
00067   public:
00079     NamingBase() {};
00080     
00092     virtual ~NamingBase(void) {};
00093     
00112     virtual void bindObject(const char* name, const RTObject_impl* rtobj) = 0;
00113     virtual void bindObject(const char* name, const RTM::ManagerServant* mgr) = 0;
00114     
00132     virtual void unbindObject(const char* name) = 0;
00133   };
00134   
00158   class NamingOnCorba
00159     : public virtual NamingBase
00160   {
00161   public:
00183     NamingOnCorba(CORBA::ORB_ptr orb, const char* names)
00184       : m_cosnaming(orb, names)
00185     {};
00186     
00198     virtual ~NamingOnCorba(void){};
00199     
00223     virtual void bindObject(const char* name, const RTObject_impl* rtobj);
00224     virtual void bindObject(const char* name, const RTM::ManagerServant* mgr);
00225     
00245     virtual void unbindObject(const char* name);
00246     
00247   private:
00248     CorbaNaming m_cosnaming;
00249     std::map<std::string, RTObject_impl*> m_names;
00250   };
00251   
00275   class NamingManager
00276   {
00277     typedef coil::Mutex Mutex;
00278     typedef coil::Guard<Mutex> Guard;
00279   public:
00299     NamingManager(Manager* manager);
00300     
00312     virtual ~NamingManager(void);
00313     
00337     void registerNameServer(const char* method, const char* name_server);
00338     
00360     void bindObject(const char* name, const RTObject_impl* rtobj);
00361     void bindObject(const char* name, const RTM::ManagerServant* mgr);
00362     
00379     void update();
00380     
00400     void unbindObject(const char* name);
00401     
00417     void unbindAll();
00418     
00438     std::vector<RTObject_impl*> getObjects();
00439     
00440   protected:
00466     NamingBase* createNamingObj(const char* method, const char* name_server);
00467     
00487     void bindCompsTo(NamingBase* ns);
00488     
00510     void registerCompName(const char* name, const RTObject_impl* rtobj);
00511     void registerMgrName(const char* name, const RTM::ManagerServant* mgr);
00512     
00532     void unregisterCompName(const char* name);
00533     void unregisterMgrName(const char* name);
00534     
00535   protected:
00536     // Name Servers' method/name and object
00544     struct Names
00545     {
00546       Names(const char* meth, const char* name, NamingBase* naming)
00547         : method(meth), nsname(name), ns(naming)
00548       {
00549       }
00550       std::string method;
00551       std::string nsname;
00552       NamingBase* ns;
00553     };
00561     std::vector<Names*> m_names;
00562     Mutex m_namesMutex;
00563     
00564     // Components' name and object
00572     struct Comps
00573     {
00574       Comps(const char* n, const RTObject_impl* obj)
00575         : name(n), rtobj(obj)
00576       {}
00577       std::string name;
00578       const RTObject_impl* rtobj;
00579     };
00580     struct Mgr
00581     {
00582       Mgr(const char* n, const RTM::ManagerServant* obj)
00583         : name(n), mgr(obj)
00584       {}
00585       std::string name;
00586       const RTM::ManagerServant* mgr;
00587     };
00595     std::vector<Comps*> m_compNames;
00596     Mutex m_compNamesMutex;
00597     std::vector<Mgr*> m_mgrNames;
00598     Mutex m_mgrNamesMutex;
00599     
00607     Manager* m_manager;
00608     
00616     Logger rtclog;
00617   }; // class NamingManager
00618 }; // namespace RTC
00619 
00620 #endif // NamingManager_h

OpenRTMに対してSun May 24 14:08:25 2009に生成されました。  doxygen 1.5.3