RTCompControl.h

説明を見る。
00001 //=================================================================================================
00002 //  ORBvar管理クラス(ベースクラス) 及び  RT コンポーネントコントロールクラス
00003 //
00004 //  date   : 20080720 first
00005 //  date   : 20080721 update
00006 //
00007 //  Author : Takashi KOJIMA, Chuo University
00008 //
00009 //=================================================================================================
00010 #ifndef INTERFACE_CONTROL_RT_COMPONENT_MODEL_CLASS
00011 #define INTERFACE_CONTROL_RT_COMPONENT_MODEL_CLASS
00012 
00013 #include <iostream>
00014 #include <string>
00015 #include <rtm/CorbaNaming.h>
00016 #include <rtm/RTObject.h>
00017 #include <assert.h>
00018 
00020 
00024 class ORBvarManager
00025 {
00026         private:
00027         bool                           m_delete;         
00028         static long                    s_exist_cnt;      
00029 
00030         public:
00031         static CORBA::ORB_var          s_orb;            
00032 
00033         ORBvarManager(bool idelete = false)
00034         :m_delete(idelete)
00035         {
00036                 if(s_exist_cnt == 0)ORBInit();
00037                 s_exist_cnt++;
00038         };
00040         virtual ~ORBvarManager();
00041 
00043         void static ORBInit()
00044         {
00045                 if(s_exist_cnt > 0)return;
00046           int    argc(0);
00047           char** argv(0);
00048                 s_orb = CORBA::ORB_init(argc, argv);
00049         };
00051         void static ORBdestroy()
00052         {
00053                 if(s_exist_cnt != 0)return;
00054                 std::cout << __FUNCTION__ << std::endl;
00055                 s_orb->destroy();
00056         };
00057 };
00058 CORBA::ORB_var ORBvarManager::s_orb;
00059 long           ORBvarManager::s_exist_cnt(0);
00060 
00061 ORBvarManager::~ORBvarManager()
00062 {
00063         s_exist_cnt--;
00064         if(s_exist_cnt == 0 && m_delete)ORBdestroy();
00065 }
00066 
00067 
00069 class RTCompControl : public ORBvarManager
00070 {
00071         public:
00073         RTCompControl(std::string OmniNameServerName,long port = -1)
00074         :ORBvarManager(),m_nameserver(s_orb,NameAndPort2str(OmniNameServerName,port).c_str())
00075         {
00076         };
00077 
00079         RTCompControl(const RTCompControl& src)
00080         :ORBvarManager(),m_nameserver(src.m_nameserver),m_con(src.m_con),m_eclist(src.m_eclist)
00081         {
00082         };
00083 
00085         virtual ~RTCompControl()
00086         {
00087         };
00088 
00090         void SetRTComponent(std::string ComponentName)
00091         {
00092                 m_con.setObject(m_nameserver.resolve(ComponentName.c_str()));
00093           m_eclist = m_con->get_execution_context_services();
00094         };
00095 
00097         void Activate()
00098         {
00099           m_eclist[0]->activate_component(RTC::RTObject::_duplicate(m_con._ptr()));
00100         };
00101 
00103         void Deactivate()
00104         {
00105           m_eclist[0]->deactivate_component(RTC::RTObject::_duplicate(m_con._ptr()));
00106         };
00107 
00109         void Reset()
00110         {
00111           m_eclist[0]->reset_component(RTC::RTObject::_duplicate(m_con._ptr()));
00112         };
00113 
00115         void SetNameServer(std::string OmniNameServerName, long OmniPort = -1)
00116         {
00117                 m_nameserver.init(NameAndPort2str( OmniNameServerName, OmniPort).c_str());
00118         };
00119 
00121         RTCompControl& operator=(const RTCompControl& right)
00122         {
00123                 m_nameserver = right.m_nameserver;
00124                 m_con        = right.m_con;
00125                 m_eclist    = right.m_eclist;
00126                 return *this;
00127         };
00128 
00129         protected:
00130         RTC::CorbaNaming                     m_nameserver;     
00131         RTC::CorbaConsumer<RTC::RTObject>    m_con;            
00132   RTC::ExecutionContextServiceList_var m_eclist;        
00133 
00135 
00140         std::string NameAndPort2str(std::string name, long port)
00141         {
00142                 if(port!=-1)
00143                 {
00144                         char PortStr[6];
00145                         sprintf(PortStr,":%ld",port);
00146                         name += PortStr;
00147                 }
00148                 return name;
00149         };
00150 };
00151 
00152 #endif

RTComponentControl に対してMon Jul 21 11:37:23 2008に生成されました。  doxygen 1.5.1