Go to the documentation of this file.00001 #include <rtm/CorbaNaming.h>
00002 #if (!defined(OPENRTM_VERSION042) && !defined(OPENRTM_VERSION110)) || defined(OPENRTM_VERSION_TRUNK)
00003 #include <rtm/Manager.h>
00004 #endif
00005 #include "SimulationExecutionContext.h"
00006
00007 namespace RTC
00008 {
00009 ReturnCode_t SimulationExecutionContext::start() throw (CORBA::SystemException)
00010 {
00011
00012 ReturnCode_t ret = OpenHRPExecutionContext::start();
00013 if (ret == RTC_OK){
00014 OpenRTM::ExtTrigExecutionContextService_var extTrigExecContext =
00015 OpenRTM::ExtTrigExecutionContextService::_narrow(this->getObjRef());
00016 m_cg->subscribe(extTrigExecContext, 1.0/get_rate());
00017 }
00018 return ret;
00019 }
00020
00021
00022 ReturnCode_t SimulationExecutionContext::stop() throw (CORBA::SystemException)
00023 {
00024 #if (defined(OPENRTM_VERSION042) || defined(OPENRTM_VERSION110)) && !defined(OPENRTM_VERSION_TRUNK)
00025 if (!m_running) return RTC::PRECONDITION_NOT_MET;
00026
00027 OpenRTM::ExtTrigExecutionContextService_var extTrigExecContext =
00028 OpenRTM::ExtTrigExecutionContextService::_narrow(this->getObjRef());
00029 m_cg->unsubscribe(extTrigExecContext);
00030
00031
00032 m_running = false;
00033
00034
00035 std::for_each(m_comps.begin(), m_comps.end(), invoke_on_shutdown());
00036
00037
00038 #ifdef OPENRTM_VERSION_042
00039 m_state = false;
00040 #else
00041
00042 m_svc = false;
00043 #endif
00044 return RTC::RTC_OK;
00045 #else
00046 ReturnCode_t ret = OpenHRPExecutionContext::stop();
00047 if (ret == RTC_OK){
00048 OpenRTM::ExtTrigExecutionContextService_var extTrigExecContext =
00049 OpenRTM::ExtTrigExecutionContextService::_narrow(this->getObjRef());
00050 m_cg->unsubscribe(extTrigExecContext);
00051 }
00052 return RTC::RTC_OK;
00053 #endif
00054 }
00055
00056 OpenHRP::ClockGenerator_var SimulationExecutionContext::m_cg;
00057 };
00058
00059 void SimulationECInit(RTC::Manager* manager)
00060 {
00061 RTC::Properties &props = manager->getConfig();
00062 RTC::CorbaNaming cn
00063 = RTC::CorbaNaming(manager->getORB(), props["corba.nameservers"].c_str());
00064 try{
00065 CORBA::Object_ptr obj = cn.resolve("ClockGenerator");
00066 RTC::SimulationExecutionContext::m_cg = OpenHRP::ClockGenerator::_narrow(obj);
00067
00068 #if defined(OPENRTM_VERSION042) || defined(OPENRTM_VERSION110)
00069 manager->registerECFactory("SimulationEC",
00070 RTC::ECCreate<RTC::SimulationExecutionContext>,
00071 RTC::ECDelete<RTC::OpenHRPExecutionContext>);
00072 #else
00073 RTC::ExecutionContextFactory::
00074 instance().addFactory("SimulationEC",
00075 ::coil::Creator< ::RTC::ExecutionContextBase,
00076 ::RTC::SimulationExecutionContext>,
00077 ::coil::Destructor< ::RTC::ExecutionContextBase,
00078 ::RTC::OpenHRPExecutionContext>);
00079 #endif
00080
00081 }catch(RTC::CorbaNaming::NotFound& ex){
00082 std::cerr << "SimultationExecutionContext: can not find ClockGenerator"
00083 << std::endl;
00084 }
00085 }
00086