Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

NamingManager.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00019 /*
00020  * $Log: NamingManager.h,v $
00021  * Revision 1.3  2007/04/26 15:37:48  n-ando
00022  * getObjects() function was added.
00023  *
00024  * Revision 1.2  2007/04/13 18:08:42  n-ando
00025  * Some changes for NameServers rebinding and objects rebinding.
00026  *
00027  * Revision 1.1  2006/11/04 21:11:44  n-ando
00028  * NamingManager was introduced to support multiple name server.
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     // Name Servers' method/name and object
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     // Components' name and object
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   }; // class NamingManager
00130 
00131 
00132 }; // namespace RTC
00133 
00134 #endif // NamingManager_h

Generated on Fri Oct 5 05:15:59 2007 for OpenRTM by  doxygen 1.4.1