NamingManager.h

説明を見る。
00001 // -*- C++ -*-
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     // Name Servers' method/name and object
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     // Components' name and object
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   }; // class NamingManager
00605 }; // namespace RTC
00606 
00607 #endif // NamingManager_h

OpenRTMに対してWed May 21 05:17:25 2008に生成されました。  doxygen 1.5.3