00001
00019 #include <assert.h>
00020 #include <rtm/RTObject.h>
00021 #include <rtm/SdoConfiguration.h>
00022 #include <rtm/CORBA_SeqUtil.h>
00023 #include <rtm/Manager.h>
00024 #include <coil/stringutil.h>
00025 #include <iostream>
00026 #include <typeinfo>
00027
00028 namespace RTC
00029 {
00037 static const char* default_conf[] =
00038 {
00039 "implementation_id", "",
00040 "type_name", "",
00041 "description", "",
00042 "version", "",
00043 "vendor", "",
00044 "category", "",
00045 "activity_type", "",
00046 "max_instance", "",
00047 "language", "",
00048 "lang_type", "",
00049 "conf", "",
00050 ""
00051 };
00052
00060 RTObject_impl::RTObject_impl(Manager* manager)
00061 : m_pManager(manager),
00062 m_pORB(CORBA::ORB::_duplicate(manager->getORB())),
00063 m_pPOA(PortableServer::POA::_duplicate(manager->getPOA())),
00064 m_portAdmin(manager->getORB(), manager->getPOA()),
00065 m_created(true), m_exiting(false),
00066 m_properties(default_conf), m_configsets(m_properties.getNode("conf")),
00067 m_sdoservice(*this),
00068 m_readAll(false),m_writeAll(false),
00069 m_readAllCompletion(false),m_writeAllCompletion(false)
00070 {
00071 m_objref = this->_this();
00072 m_pSdoConfigImpl = new SDOPackage::Configuration_impl(m_configsets,
00073 m_sdoservice);
00074 m_pSdoConfig = SDOPackage::Configuration::
00075 _duplicate(m_pSdoConfigImpl->getObjRef());
00076 }
00077
00085 RTObject_impl::RTObject_impl(CORBA::ORB_ptr orb,
00086 PortableServer::POA_ptr poa)
00087 : m_pManager(NULL),
00088 m_pORB(CORBA::ORB::_duplicate(orb)),
00089 m_pPOA(PortableServer::POA::_duplicate(poa)),
00090 m_portAdmin(orb, poa),
00091 m_created(true), m_exiting(false),
00092 m_properties(default_conf), m_configsets(m_properties.getNode("conf")),
00093 m_sdoservice(*this),
00094 m_readAll(false),m_writeAll(false),
00095 m_readAllCompletion(false),m_writeAllCompletion(false)
00096 {
00097 m_objref = this->_this();
00098 m_pSdoConfigImpl = new SDOPackage::Configuration_impl(m_configsets,
00099 m_sdoservice);
00100 m_pSdoConfig = SDOPackage::Configuration::
00101 _duplicate(m_pSdoConfigImpl->getObjRef());
00102 }
00103
00111 RTObject_impl::~RTObject_impl()
00112 {
00113 RTC_TRACE(("~RTObject_impl()"));
00114 m_pSdoConfigImpl->_remove_ref();
00115 }
00116
00117
00118
00119
00127
00128
00129 ReturnCode_t RTObject_impl::onInitialize()
00130 {
00131 RTC_TRACE(("onInitialize()"));
00132 return RTC::RTC_OK;
00133 }
00134
00142
00143
00144 ReturnCode_t RTObject_impl::onFinalize()
00145 {
00146 RTC_TRACE(("onFinalize()"));
00147 return RTC::RTC_OK;
00148 }
00149
00157
00158
00159 ReturnCode_t RTObject_impl::onStartup(RTC::UniqueId ec_id)
00160 {
00161 RTC_TRACE(("onStartup(%d)", ec_id));
00162 return RTC::RTC_OK;
00163 }
00164
00172
00173
00174 ReturnCode_t RTObject_impl::onShutdown(RTC::UniqueId ec_id)
00175 {
00176 RTC_TRACE(("onShutdown(%d)", ec_id));
00177 return RTC::RTC_OK;
00178 }
00179
00187
00188
00189 ReturnCode_t RTObject_impl::onActivated(RTC::UniqueId ec_id)
00190 {
00191 RTC_TRACE(("onActivated(%d)", ec_id));
00192 return RTC::RTC_OK;
00193 }
00194
00202
00203
00204 ReturnCode_t RTObject_impl::onDeactivated(RTC::UniqueId ec_id)
00205 {
00206 RTC_TRACE(("onDeactivated(%d)", ec_id));
00207 return RTC::RTC_OK;
00208 }
00209
00217
00218
00219 ReturnCode_t RTObject_impl::onExecute(RTC::UniqueId ec_id)
00220 {
00221 RTC_PARANOID(("onExecute(%d)", ec_id));
00222 return RTC::RTC_OK;
00223 }
00224
00232
00233
00234 ReturnCode_t RTObject_impl::onAborting(RTC::UniqueId ec_id)
00235 {
00236 RTC_TRACE(("onAborting(%d)", ec_id));
00237 return RTC::RTC_OK;
00238 }
00239
00247
00248
00249 ReturnCode_t RTObject_impl::onError(RTC::UniqueId ec_id)
00250 {
00251 RTC_TRACE(("onError(%d)", ec_id));
00252 return RTC::RTC_OK;
00253 }
00254
00262
00263
00264 ReturnCode_t RTObject_impl::onReset(RTC::UniqueId ec_id)
00265 {
00266 RTC_TRACE(("onReset(%d)", ec_id));
00267 return RTC::RTC_OK;
00268 }
00269
00277
00278
00279 ReturnCode_t RTObject_impl::onStateUpdate(RTC::UniqueId ec_id)
00280 {
00281 RTC_PARANOID(("onStateUpdate(%d)", ec_id));
00282 return RTC::RTC_OK;
00283 }
00284
00292
00293
00294 ReturnCode_t RTObject_impl::onRateChanged(RTC::UniqueId ec_id)
00295 {
00296 RTC_TRACE(("onRatechanged(%d)", ec_id));
00297 return RTC::RTC_OK;
00298 }
00299
00300
00301
00302
00310 ReturnCode_t RTObject_impl::initialize()
00311 throw (CORBA::SystemException)
00312 {
00313 RTC_TRACE(("initialize()"));
00314 std::string ec_args;
00315
00316 ec_args += m_properties["exec_cxt.periodic.type"];
00317 ec_args += "?";
00318 ec_args += "rate=" + m_properties["exec_cxt.periodic.rate"];
00319
00320 RTC::ExecutionContextBase* ec;
00321 ec = RTC::Manager::instance().createContext(ec_args.c_str());
00322 if (ec == NULL) return RTC::RTC_ERROR;
00323
00324 ec->set_rate(atof(m_properties["exec_cxt.periodic.rate"].c_str()));
00325 m_eclist.push_back(ec);
00326 ExecutionContextService_var ecv;
00327 ecv = RTC::ExecutionContextService::_duplicate(ec->getObjRef());
00328 if (CORBA::is_nil(ecv)) return RTC::RTC_ERROR;
00329
00330 ec->bindComponent(this);
00331
00332
00333 if (m_ecMine.length() == 0) return RTC::PRECONDITION_NOT_MET;
00334
00335 ReturnCode_t ret;
00336 ret = on_initialize();
00337 if (ret != RTC::RTC_OK) return ret;
00338 m_created = false;
00339
00340 for (::CORBA::ULong i(0), len(m_ecMine.length()); i < len; ++i)
00341 {
00342 RTC_DEBUG(("EC[%d] starting.", i));
00343 m_ecMine[i]->start();
00344 }
00345
00346
00347 return ret;
00348 }
00349
00357 ReturnCode_t RTObject_impl::finalize()
00358 throw (CORBA::SystemException)
00359 {
00360 RTC_TRACE(("finalize()"));
00361 if (m_created) return RTC::PRECONDITION_NOT_MET;
00362 if (!m_exiting) return RTC::PRECONDITION_NOT_MET;
00363
00364
00365
00366 if(m_ecOther.length() != 0)
00367 {
00368
00369 for (CORBA::ULong ic(0), len(m_ecOther.length()); ic < len; ++ic)
00370 {
00371 if(! CORBA::is_nil(m_ecOther[ic]))
00372 {
00373 return RTC::PRECONDITION_NOT_MET;
00374 }
00375 }
00376 CORBA_SeqUtil::clear(m_ecOther);
00377 }
00378
00379 ReturnCode_t ret(on_finalize());
00380
00381 shutdown();
00382 return ret;
00383 }
00384
00394 ReturnCode_t RTObject_impl::exit()
00395 throw (CORBA::SystemException)
00396 {
00397 RTC_TRACE(("exit()"));
00398 if (m_created) { return RTC::PRECONDITION_NOT_MET; }
00399 if (m_exiting) { return RTC::RTC_OK; }
00400
00401
00402 CORBA_SeqUtil::for_each(m_ecMine,
00403 deactivate_comps(m_objref));
00404
00405 CORBA_SeqUtil::for_each(m_ecOther,
00406 deactivate_comps(m_objref));
00407
00408
00409
00410
00411 for (CORBA::ULong ic(0), len(m_ecOther.length()); ic < len; ++ic)
00412 {
00413
00414 RTC::LightweightRTObject_var comp(this->_this());
00415 if (! ::CORBA::is_nil(m_ecOther[ic]))
00416 {
00417 m_ecOther[ic]->remove_component(comp.in());
00418 }
00419 }
00420 m_exiting = true;
00421 ReturnCode_t ret(finalize());
00422
00423 return ret;
00424 }
00425
00433 CORBA::Boolean RTObject_impl::is_alive(ExecutionContext_ptr exec_context)
00434 throw (CORBA::SystemException)
00435 {
00436 RTC_TRACE(("is_alive()"));
00437 for (::CORBA::ULong i(0), len(m_ecMine.length()); i < len; ++i)
00438 {
00439 if (exec_context->_is_equivalent(m_ecMine[i]))
00440 return true;
00441 }
00442
00443 for (::CORBA::ULong i(0), len(m_ecOther.length()); i < len; ++i)
00444 {
00445 if (! ::CORBA::is_nil(m_ecOther[i]))
00446 {
00447 if (exec_context->_is_equivalent(m_ecOther[i]))
00448 return true;
00449 }
00450 }
00451 return false;
00452 }
00453
00461 ExecutionContext_ptr RTObject_impl::get_context(UniqueId ec_id)
00462 throw (CORBA::SystemException)
00463 {
00464 RTC_TRACE(("get_context(%d)", ec_id));
00465
00466 if (ec_id < ECOTHER_OFFSET)
00467 {
00468 if ((::CORBA::ULong)ec_id < m_ecMine.length())
00469 {
00470 return ExecutionContext::_duplicate(m_ecMine[ec_id]);
00471 }
00472 else
00473 {
00474 return ExecutionContext::_nil();
00475 }
00476 }
00477
00478
00479 ::CORBA::ULong index(ec_id - ECOTHER_OFFSET);
00480
00481 if (index < m_ecOther.length())
00482 {
00483 if (! ::CORBA::is_nil(m_ecOther[index]))
00484 {
00485 return ExecutionContext::_duplicate(m_ecOther[index]);
00486 }
00487 }
00488
00489 return ExecutionContext::_nil();
00490 }
00491
00499 ExecutionContextList* RTObject_impl::get_owned_contexts()
00500 throw (CORBA::SystemException)
00501 {
00502 RTC_TRACE(("get_owned_context()"));
00503
00504 #ifndef ORB_IS_RTORB
00505 ExecutionContextList_var execlist;
00506 execlist = new ExecutionContextList();
00507
00508 CORBA_SeqUtil::for_each(m_ecMine, ec_copy(execlist));
00509 #else // ORB_IS_RTORB
00510 ExecutionContextList_var execlist;
00511 execlist = new ExecutionContextList();
00512
00513 int n = m_ecMine.length();
00514 for(int i(0), j(0); i < n ; ++i)
00515 {
00516 RTC_ExecutionContext ec_mine = m_ecMine.cobj()->_buffer[i];
00517
00518 if (ec_mine)
00519 {
00520 execlist.length(j+1);
00521 execlist->cobj()->_buffer[j] = CORBA_Object_dup(ec_mine);
00522 ++j;
00523 }
00524 }
00525 #endif // ORB_IS_RTORB
00526 return execlist._retn();
00527 }
00528
00536 ExecutionContextList* RTObject_impl::get_participating_contexts()
00537 throw (CORBA::SystemException)
00538 {
00539 RTC_TRACE(("get_participating_contexts()"));
00540 ExecutionContextList_var execlist;
00541 execlist = new ExecutionContextList();
00542
00543 CORBA_SeqUtil::for_each(m_ecOther, ec_copy(execlist));
00544
00545 return execlist._retn();
00546 }
00547
00548
00556 ExecutionContextHandle_t
00557 RTObject_impl::get_context_handle(ExecutionContext_ptr cxt)
00558 throw (CORBA::SystemException)
00559 {
00560 RTC_TRACE(("get_context_handle()"));
00561 CORBA::Long num;
00562 num = CORBA_SeqUtil::find(m_ecMine, ec_find(cxt));
00563 if (num != -1)
00564 {
00565 return (ExecutionContextHandle_t)num;
00566 }
00567 num = CORBA_SeqUtil::find(m_ecOther, ec_find(cxt));
00568 if (num != -1)
00569 {
00570 return (ExecutionContextHandle_t)(ECOTHER_OFFSET + num);
00571 }
00572 return (ExecutionContextHandle_t)(-1);
00573 }
00574
00575
00583 UniqueId RTObject_impl::attach_context(ExecutionContext_ptr exec_context)
00584 throw (CORBA::SystemException)
00585 {
00586 RTC_TRACE(("attach_context()"));
00587
00588
00589
00590
00591 ExecutionContextService_var ecs;
00592 ecs = ExecutionContextService::_narrow(exec_context);
00593 if (CORBA::is_nil(ecs))
00594 {
00595 return -1;
00596 }
00597
00598
00599 for (::CORBA::ULong i(0), len(m_ecOther.length()); i < len; ++i)
00600 {
00601 if (::CORBA::is_nil(m_ecOther[i]))
00602 {
00603 m_ecOther[i] = ExecutionContextService::_duplicate(ecs);
00604 UniqueId ec_id(i + ECOTHER_OFFSET);
00605 onAttachExecutionContext(ec_id);
00606 return ec_id;
00607 }
00608 }
00609
00610
00611 CORBA_SeqUtil::
00612 push_back(m_ecOther, ExecutionContextService::_duplicate(ecs));
00613
00614 UniqueId ec_id((m_ecOther.length() - 1) + ECOTHER_OFFSET);
00615 onAttachExecutionContext(ec_id);
00616 return ec_id;
00617 }
00618
00619 UniqueId
00620 RTObject_impl::bindContext(ExecutionContext_ptr exec_context)
00621 {
00622 RTC_TRACE(("bindContext()"));
00623
00624
00625
00626
00627 ExecutionContextService_var ecs;
00628 ecs = ExecutionContextService::_narrow(exec_context);
00629 if (CORBA::is_nil(ecs))
00630 {
00631 return -1;
00632 }
00633
00634
00635 for (::CORBA::ULong i(0), len(m_ecMine.length()); i < len; ++i)
00636 {
00637 if (::CORBA::is_nil(m_ecMine[i]))
00638 {
00639 m_ecMine[i] = ExecutionContextService::_duplicate(ecs);
00640 onAttachExecutionContext(i);
00641 return i;
00642 }
00643 }
00644
00645
00646 CORBA_SeqUtil::
00647 push_back(m_ecMine, ExecutionContextService::_duplicate(ecs));
00648
00649 UniqueId ec_id(m_ecMine.length() - 1);
00650 return ec_id;
00651 }
00652
00660 ReturnCode_t RTObject_impl::detach_context(UniqueId ec_id)
00661 throw (CORBA::SystemException)
00662 {
00663 RTC_TRACE(("detach_context(%d)", ec_id));
00664 ::CORBA::ULong len(m_ecOther.length());
00665
00666
00667
00668
00669
00670 if ((CORBA::ULong)ec_id < ECOTHER_OFFSET ||
00671 (CORBA::ULong)(ec_id - ECOTHER_OFFSET) > len)
00672 {
00673 return RTC::BAD_PARAMETER;
00674 }
00675 ::CORBA::ULong index(ec_id - ECOTHER_OFFSET);
00676
00677 if (CORBA::is_nil(m_ecOther[index]))
00678 {
00679 return RTC::BAD_PARAMETER;
00680 }
00681
00682 m_ecOther[index] = ::RTC::ExecutionContextService::_nil();
00683 onDetachExecutionContext(ec_id);
00684 return RTC::RTC_OK;
00685 }
00686
00687
00688
00689
00690
00698 ComponentProfile* RTObject_impl::get_component_profile()
00699 throw (CORBA::SystemException)
00700 {
00701 RTC_TRACE(("get_component_profile()"));
00702 try
00703 {
00704 ComponentProfile_var profile
00705 = new ComponentProfile();
00706 #ifndef ORB_IS_RTORB
00707 profile->instance_name =
00708 CORBA::string_dup(m_properties["instance_name"].c_str());
00709 profile->type_name =
00710 CORBA::string_dup(m_properties["type_name"].c_str());
00711 profile->description =
00712 CORBA::string_dup(m_properties["description"].c_str());
00713 profile->version =
00714 CORBA::string_dup(m_properties["version"].c_str());
00715 profile->vendor =
00716 CORBA::string_dup(m_properties["vendor"].c_str());
00717 profile->category =
00718 CORBA::string_dup(m_properties["category"].c_str());
00719 profile->port_profiles = m_portAdmin.getPortProfileList();
00720 #else // ORB_IS_RTORB
00721 profile->instance_name = (char *)m_properties["instance_name"].c_str();
00722 profile->type_name = (char *)m_properties["type_name"].c_str();
00723 profile->description = (char *)m_properties["description"].c_str();
00724 profile->version = (char *)m_properties["version"].c_str();
00725 profile->vendor = (char *)m_properties["vendor"].c_str();
00726 profile->category = (char *)m_properties["category"].c_str();
00727 PortProfileList ppl = m_portAdmin.getPortProfileList();
00728 profile->port_profiles = ppl._retn();
00729 #endif // ORB_IS_RTORB
00730 NVUtil::copyFromProperties(profile->properties, m_properties);
00731 return profile._retn();
00732 }
00733 catch (...)
00734 {
00735 ;
00736 }
00737 assert(false);
00738 return 0;
00739 }
00740
00748 PortServiceList* RTObject_impl::get_ports()
00749 throw (CORBA::SystemException)
00750 {
00751 RTC_TRACE(("get_ports()"));
00752 try
00753 {
00754 return m_portAdmin.getPortServiceList();
00755 }
00756 catch (...)
00757 {
00758 ;
00759 }
00760 assert(false);
00761 return 0;
00762 }
00763
00764
00765
00766
00767
00775 ReturnCode_t RTObject_impl::on_initialize()
00776 throw (CORBA::SystemException)
00777 {
00778 RTC_TRACE(("on_initialize()"));
00779 ReturnCode_t ret(RTC::RTC_ERROR);
00780 try
00781 {
00782 preOnInitialize(0);
00783 ret = onInitialize();
00784 }
00785 catch (...)
00786 {
00787 ret = RTC::RTC_ERROR;
00788 }
00789 std::string active_set;
00790 active_set = m_properties.getProperty("configuration.active_config",
00791 "default");
00792 if (m_configsets.haveConfig(active_set.c_str()))
00793 {
00794 m_configsets.update(active_set.c_str());
00795 }
00796 else
00797 {
00798 m_configsets.update("default");
00799 }
00800 postOnInitialize(0, ret);
00801 return ret;
00802 }
00803
00811 ReturnCode_t RTObject_impl::on_finalize()
00812 throw (CORBA::SystemException)
00813 {
00814 RTC_TRACE(("on_finalize()"));
00815 ReturnCode_t ret(RTC::RTC_ERROR);
00816 try
00817 {
00818 preOnFinalize(0);
00819 ret = onFinalize();
00820 }
00821 catch (...)
00822 {
00823 ret = RTC::RTC_ERROR;
00824 }
00825 postOnFinalize(0, ret);
00826 return ret;
00827 }
00828
00836 ReturnCode_t RTObject_impl::on_startup(UniqueId ec_id)
00837 throw (CORBA::SystemException)
00838 {
00839 RTC_TRACE(("on_startup(%d)", ec_id));
00840 ReturnCode_t ret(RTC::RTC_ERROR);
00841 try
00842 {
00843 preOnStartup(ec_id);
00844 ret = onStartup(ec_id);
00845 }
00846 catch (...)
00847 {
00848 ret = RTC::RTC_ERROR;
00849 }
00850 postOnStartup(ec_id, ret);
00851 return ret;
00852 }
00853
00861 ReturnCode_t RTObject_impl::on_shutdown(UniqueId ec_id)
00862 throw (CORBA::SystemException)
00863 {
00864 RTC_TRACE(("on_shutdown(%d)", ec_id));
00865 ReturnCode_t ret(RTC::RTC_ERROR);
00866 try
00867 {
00868 preOnShutdown(ec_id);
00869 ret = onShutdown(ec_id);
00870 }
00871 catch (...)
00872 {
00873 ret = RTC::RTC_ERROR;
00874 }
00875 postOnShutdown(ec_id, ret);
00876 return ret;
00877 }
00878
00886 ReturnCode_t RTObject_impl::on_activated(UniqueId ec_id)
00887 throw (CORBA::SystemException)
00888 {
00889 RTC_TRACE(("on_activated(%d)", ec_id));
00890 ReturnCode_t ret(RTC::RTC_ERROR);
00891 try
00892 {
00893 preOnActivated(ec_id);
00894 m_configsets.update();
00895 ret = onActivated(ec_id);
00896 m_portAdmin.activatePorts();
00897 }
00898 catch (...)
00899 {
00900 ret = RTC::RTC_ERROR;
00901 }
00902 postOnActivated(ec_id, ret);
00903 return ret;
00904 }
00905
00913 ReturnCode_t RTObject_impl::on_deactivated(UniqueId ec_id)
00914 throw (CORBA::SystemException)
00915 {
00916 RTC_TRACE(("on_deactivated(%d)", ec_id));
00917 ReturnCode_t ret(RTC::RTC_ERROR);
00918 try
00919 {
00920 preOnDeactivated(ec_id);
00921 m_portAdmin.deactivatePorts();
00922 ret = onDeactivated(ec_id);
00923 }
00924 catch (...)
00925 {
00926 ret = RTC::RTC_ERROR;
00927 }
00928 postOnDeactivated(ec_id, ret);
00929 return ret;
00930 }
00931
00939 ReturnCode_t RTObject_impl::on_aborting(UniqueId ec_id)
00940 throw (CORBA::SystemException)
00941 {
00942 RTC_TRACE(("on_aborting(%d)", ec_id));
00943 ReturnCode_t ret(RTC::RTC_ERROR);
00944 try
00945 {
00946 preOnAborting(ec_id);
00947 ret = onAborting(ec_id);
00948 }
00949 catch (...)
00950 {
00951 ret = RTC::RTC_ERROR;
00952 }
00953 postOnAborting(ec_id, ret);
00954 return ret;
00955 }
00956
00964 ReturnCode_t RTObject_impl::on_error(UniqueId ec_id)
00965 throw (CORBA::SystemException)
00966 {
00967 RTC_TRACE(("on_error(%d)", ec_id));
00968 ReturnCode_t ret(RTC::RTC_ERROR);
00969 try
00970 {
00971 preOnError(ec_id);
00972 ret = onError(ec_id);
00973 }
00974 catch (...)
00975 {
00976 ret = RTC::RTC_ERROR;
00977 }
00978 m_configsets.update();
00979 postOnError(ec_id, ret);
00980 return ret;
00981 }
00982
00990 ReturnCode_t RTObject_impl::on_reset(UniqueId ec_id)
00991 throw (CORBA::SystemException)
00992 {
00993 RTC_TRACE(("on_reset(%d)", ec_id));
00994 ReturnCode_t ret(RTC::RTC_ERROR);
00995 try
00996 {
00997 preOnReset(ec_id);
00998 ret = onReset(ec_id);
00999 }
01000 catch (...)
01001 {
01002 ret = RTC::RTC_ERROR;
01003 }
01004 postOnReset(ec_id, ret);
01005 return ret;
01006 }
01007
01016 ReturnCode_t RTObject_impl::on_execute(UniqueId ec_id)
01017 throw (CORBA::SystemException)
01018 {
01019 RTC_PARANOID(("on_execute(%d)", ec_id));
01020 ReturnCode_t ret(RTC::RTC_ERROR);
01021 try
01022 {
01023 preOnExecute(ec_id);
01024 if (m_readAll) {readAll(); }
01025 ret = onExecute(ec_id);
01026 if (m_writeAll) { writeAll();}
01027 }
01028 catch (...)
01029 {
01030 ret = RTC::RTC_ERROR;
01031 }
01032 postOnExecute(ec_id, ret);
01033 return ret;
01034 }
01035
01044 ReturnCode_t RTObject_impl::on_state_update(UniqueId ec_id)
01045 throw (CORBA::SystemException)
01046 {
01047 RTC_PARANOID(("on_state_update(%d)", ec_id));
01048 ReturnCode_t ret(RTC::RTC_ERROR);
01049 try
01050 {
01051 preOnStateUpdate(ec_id);
01052 ret = onStateUpdate(ec_id);
01053 m_configsets.update();
01054 }
01055 catch (...)
01056 {
01057 ret = RTC::RTC_ERROR;
01058 }
01059 postOnStateUpdate(ec_id, ret);
01060 return ret;
01061 }
01062
01070 ReturnCode_t RTObject_impl::on_rate_changed(UniqueId ec_id)
01071 throw (CORBA::SystemException)
01072 {
01073 RTC_TRACE(("on_rate_changed(%d)", ec_id));
01074 ReturnCode_t ret(RTC::RTC_ERROR);
01075 try
01076 {
01077 preOnRateChanged(ec_id);
01078 ret = onRateChanged(ec_id);
01079 }
01080 catch (...)
01081 {
01082 ret = RTC::RTC_ERROR;
01083 }
01084 postOnRateChanged(ec_id, ret);
01085 return ret;
01086 }
01087
01088
01089
01090
01098 SDOPackage::OrganizationList* RTObject_impl::get_owned_organizations()
01099 throw (CORBA::SystemException,
01100 SDOPackage::NotAvailable, SDOPackage::InternalError)
01101 {
01102 RTC_TRACE(("get_owned_organizations()"));
01103 try
01104 {
01105 SDOPackage::OrganizationList_var org_list;
01106 org_list = new SDOPackage::OrganizationList(m_sdoOwnedOrganizations);
01107 return org_list._retn();
01108 }
01109 catch (...)
01110 {
01111 throw SDOPackage::NotAvailable();
01112 }
01113 return new SDOPackage::OrganizationList();
01114 }
01115
01116
01124 char* RTObject_impl::get_sdo_id()
01125 throw (CORBA::SystemException,
01126 SDOPackage::NotAvailable, SDOPackage::InternalError)
01127 {
01128 RTC_TRACE(("get_sdo_id()"));
01129 try
01130 {
01131 CORBA::String_var sdo_id;
01132 sdo_id = CORBA::string_dup(m_profile.instance_name);
01133 return sdo_id._retn();
01134 }
01135 catch (...)
01136 {
01137 throw SDOPackage::InternalError("get_sdo_id()");
01138 }
01139 }
01140
01148 char* RTObject_impl::get_sdo_type()
01149 throw (CORBA::SystemException,
01150 SDOPackage::NotAvailable, SDOPackage::InternalError)
01151 {
01152 RTC_TRACE(("get_sdo_type()"));
01153 CORBA::String_var sdo_type;
01154 try
01155 {
01156 sdo_type = CORBA::string_dup(m_profile.description);
01157 return sdo_type._retn();
01158 }
01159 catch (...)
01160 {
01161 throw SDOPackage::InternalError("get_sdo_type()");
01162 }
01163 sdo_type = "";
01164 return sdo_type._retn();
01165 }
01166
01174 SDOPackage::DeviceProfile* RTObject_impl::get_device_profile()
01175 throw (CORBA::SystemException,
01176 SDOPackage::NotAvailable, SDOPackage::InternalError)
01177 {
01178 RTC_TRACE(("get_device_profile()"));
01179 try
01180 {
01181 SDOPackage::DeviceProfile_var dprofile;
01182 dprofile =
01183 new SDOPackage::DeviceProfile(m_pSdoConfigImpl->getDeviceProfile());
01184 return dprofile._retn();
01185 }
01186 catch (...)
01187 {
01188 throw SDOPackage::InternalError("get_device_profile()");
01189 }
01190 return new SDOPackage::DeviceProfile();
01191 }
01192
01193
01194
01195
01203 SDOPackage::ServiceProfileList* RTObject_impl::get_service_profiles()
01204 throw (CORBA::SystemException,
01205 SDOPackage::NotAvailable, SDOPackage::InternalError)
01206 {
01207 RTC_TRACE(("get_service_profiles()"));
01208
01209 SDOPackage::ServiceProfileList_var sprofiles;
01210 try
01211 {
01212 sprofiles = m_sdoservice.getServiceProviderProfiles();
01213 RTC_DEBUG(("SDO ServiceProfiles[%d]", sprofiles->length()));
01214 }
01215 catch (...)
01216 {
01217 RTC_ERROR(("Unknown exception cought in get_service_profiles()."));
01218 throw SDOPackage::InternalError("get_service_profiles()");
01219 }
01220 return sprofiles._retn();
01221 }
01222
01230 SDOPackage::ServiceProfile*
01231 RTObject_impl::get_service_profile(const char* id)
01232 throw (CORBA::SystemException,
01233 SDOPackage::InvalidParameter, SDOPackage::NotAvailable,
01234 SDOPackage::InternalError)
01235 {
01236 if (!id)
01237 {
01238 throw SDOPackage::
01239 InvalidParameter("get_service_profile(): Empty name.");
01240 }
01241 RTC_TRACE(("get_service_profile(%s))", id));
01242
01243 SDOPackage::ServiceProfile_var prof;
01244 try
01245 {
01246 prof = m_sdoservice.getServiceProviderProfile(id);
01247 }
01248 catch (SDOPackage::InvalidParameter &e)
01249 {
01250 RTC_ERROR(("InvalidParameter exception: name (%s) is not found", id));
01251 throw e;
01252 }
01253 catch (...)
01254 {
01255 RTC_ERROR(("Unknown exception cought in get_service_profile(%s).", id));
01256 throw SDOPackage::InternalError("get_service_profile()");
01257 }
01258 return prof._retn();
01259 }
01260
01268 SDOPackage::SDOService_ptr RTObject_impl::get_sdo_service(const char* id)
01269 throw (CORBA::SystemException,
01270 SDOPackage::InvalidParameter, SDOPackage::NotAvailable,
01271 SDOPackage::InternalError)
01272 {
01273 RTC_TRACE(("get_sdo_service(%s))", id));
01274 if (!id)
01275 {
01276 throw SDOPackage::InvalidParameter("get_service(): Empty name.");
01277 }
01278
01279 SDOPackage::SDOService_var sdo;
01280 try
01281 {
01282 sdo = m_sdoservice.getServiceProvider(id);
01283 }
01284 catch (SDOPackage::InvalidParameter &e)
01285 {
01286 throw e;
01287 }
01288 catch (...)
01289 {
01290 throw SDOPackage::InternalError("get_service()");
01291 }
01292 return sdo;
01293 }
01294
01302 SDOPackage::Configuration_ptr RTObject_impl::get_configuration()
01303 throw (CORBA::SystemException,
01304 SDOPackage::InterfaceNotImplemented, SDOPackage::NotAvailable,
01305 SDOPackage::InternalError)
01306 {
01307 RTC_TRACE(("get_configuration()"));
01308 if (m_pSdoConfig == NULL)
01309 throw SDOPackage::InterfaceNotImplemented();
01310 try
01311 {
01312 #ifdef ORB_IS_RTORB
01313 SDOPackage::Configuration_ptr config;
01314 config = m_pSdoConfig;
01315 return config;
01316 #else // ORB_IS_RTORB
01317 SDOPackage::Configuration_var config;
01318 config = m_pSdoConfig;
01319 return config._retn();
01320 #endif // ORB_IS_RTORB
01321 }
01322 catch (...)
01323 {
01324 SDOPackage::InternalError("get_configuration()");
01325 }
01326 return SDOPackage::Configuration::_nil();
01327 }
01328
01336 SDOPackage::Monitoring_ptr RTObject_impl::get_monitoring()
01337 throw (CORBA::SystemException,
01338 SDOPackage::InterfaceNotImplemented, SDOPackage::NotAvailable,
01339 SDOPackage::InternalError)
01340 {
01341 RTC_TRACE(("get_monitoring()"));
01342 throw SDOPackage::InterfaceNotImplemented();
01343 return SDOPackage::Monitoring::_nil();
01344 }
01345
01353 SDOPackage::OrganizationList* RTObject_impl::get_organizations()
01354 throw (CORBA::SystemException,
01355 SDOPackage::NotAvailable, SDOPackage::InternalError)
01356 {
01357 RTC_TRACE(("get_organizations()"));
01358 m_sdoOrganizations = m_pSdoConfigImpl->getOrganizations();
01359 try
01360 {
01361 SDOPackage::OrganizationList_var org;
01362 org = new SDOPackage::OrganizationList(m_sdoOrganizations);
01363 return org._retn();
01364 }
01365 catch (...)
01366 {
01367 throw SDOPackage::InternalError("get_organizations()");
01368 }
01369 return new SDOPackage::OrganizationList(0);
01370 }
01371
01379 SDOPackage::NVList* RTObject_impl::get_status_list()
01380 throw (CORBA::SystemException,
01381 SDOPackage::NotAvailable, SDOPackage::InternalError)
01382 {
01383 RTC_TRACE(("get_status_list()"));
01384 try
01385 {
01386 NVList_var status;
01387 status = new NVList(m_sdoStatus);
01388 return status._retn();
01389 }
01390 catch (...)
01391 {
01392 SDOPackage::InternalError("get_status_list()");
01393 }
01394 return new SDOPackage::NVList(0);
01395 }
01396
01404 CORBA::Any* RTObject_impl::get_status(const char* name)
01405 throw (CORBA::SystemException,
01406 SDOPackage::InvalidParameter, SDOPackage::NotAvailable,
01407 SDOPackage::InternalError)
01408 {
01409 RTC_TRACE(("get_status(%s)", name));
01410 CORBA::Long index;
01411 index = CORBA_SeqUtil::find(m_sdoStatus, nv_name(name));
01412 if (index < 0)
01413 throw SDOPackage::InvalidParameter("get_status(): Not found");
01414 try
01415 {
01416 CORBA::Any_var status;
01417 status = new CORBA::Any(m_sdoStatus[index].value);
01418 return status._retn();
01419 }
01420 catch (...)
01421 {
01422 throw SDOPackage::InternalError("get_status()");
01423 }
01424 return new CORBA::Any();
01425 }
01426
01427
01428
01429
01437 void RTObject_impl::setInstanceName(const char* instance_name)
01438 {
01439 rtclog.setName(instance_name);
01440 RTC_TRACE(("setInstanceName(%s)", instance_name));
01441
01442 m_properties["instance_name"] = instance_name;
01443 #ifndef ORB_IS_RTORB
01444 m_profile.instance_name = m_properties["instance_name"].c_str();
01445 #else // ORB_IS_RTORB
01446 m_profile.instance_name = (char *)m_properties["instance_name"].c_str();
01447 #endif // ORB_IS_RTORB
01448 }
01449
01457 std::vector<std::string> RTObject_impl::getNamingNames()
01458 {
01459 RTC_TRACE(("getNamingNames()"));
01460 return coil::split(m_properties["naming.names"], ",");
01461 }
01462
01470 void RTObject_impl::setObjRef(const RTObject_ptr rtobj)
01471 {
01472 RTC_TRACE(("setObjRef()"));
01473 m_objref = RTC::RTObject::_duplicate(rtobj);
01474 }
01475
01483 RTObject_ptr RTObject_impl::getObjRef() const
01484 {
01485 RTC_TRACE(("getObjRef()"));
01486
01487 return m_objref;
01488 }
01489
01497 void RTObject_impl::setProperties(const coil::Properties& prop)
01498 {
01499 RTC_TRACE(("setProperties()"));
01500 m_properties << prop;
01501 #ifndef ORB_IS_RTORB
01502 m_profile.instance_name = m_properties["instance_name"].c_str();
01503 m_profile.type_name = m_properties["type_name"].c_str();
01504 m_profile.description = m_properties["description"].c_str();
01505 m_profile.version = m_properties["version"].c_str();
01506 m_profile.vendor = m_properties["vendor"].c_str();
01507 m_profile.category = m_properties["category"].c_str();
01508 #else // ORB_IS_RTORB
01509 m_profile.instance_name = (char*)m_properties["instance_name"].c_str();
01510 m_profile.type_name = (char*)m_properties["type_name"].c_str();
01511 m_profile.description = (char*)m_properties["description"].c_str();
01512 m_profile.version = (char*)m_properties["version"].c_str();
01513 m_profile.vendor = (char*)m_properties["vendor"].c_str();
01514 m_profile.category = (char*)m_properties["category"].c_str();
01515 #endif //ORB_IS_RTORB
01516 }
01517
01525 coil::Properties& RTObject_impl::getProperties()
01526 {
01527 RTC_TRACE(("getProperties()"));
01528 return m_properties;
01529 }
01530
01538 void RTObject_impl::updateParameters(const char* config_set)
01539 {
01540 RTC_TRACE(("updateParameters(%s)", config_set));
01541 m_configsets.update(config_set);
01542 return;
01543 }
01544
01552 void RTObject_impl::registerPort(PortBase& port)
01553 {
01554 RTC_TRACE(("registerPort(PortBase&)"));
01555 if (!addPort(port))
01556 RTC_ERROR(("addPort(PortBase&) failed."));
01557 }
01558 bool RTObject_impl::addPort(PortBase& port)
01559 {
01560 RTC_TRACE(("addPort(PortBase&)"));
01561 port.setOwner(this->getObjRef());
01562 port.setPortConnectListenerHolder(&m_portconnListeners);
01563 onAddPort(port.getPortProfile());
01564 return m_portAdmin.addPort(port);
01565 }
01566
01567 void RTObject_impl::registerPort(PortService_ptr port)
01568 {
01569 RTC_TRACE(("registerPort(PortBase&)"));
01570 if (!addPort(port))
01571 RTC_ERROR(("addPort(PortBase&) failed."));
01572 }
01573 bool RTObject_impl::addPort(PortService_ptr port)
01574 {
01575 RTC_TRACE(("addPort(PortService_ptr)"));
01576 return m_portAdmin.addPort(port);
01577 }
01578
01579 void RTObject_impl::registerPort(CorbaPort& port)
01580 {
01581 RTC_TRACE(("registerPort(CorbaPort&)"));
01582 if (!addPort(port))
01583 RTC_ERROR(("addPort(CorbaPort&) failed."));
01584 }
01585
01586 bool RTObject_impl::addPort(CorbaPort& port)
01587 {
01588 RTC_TRACE(("addPort(CrobaPort)"));
01589 std::string propkey("port.corbaport.");
01590 m_properties.getNode(propkey)
01591 << m_properties.getNode("port.corba");
01592
01593 port.init(m_properties.getNode(propkey));
01594 return addPort((PortBase&)port);
01595 }
01596
01604 bool RTObject_impl::addInPort(const char* name,
01605 InPortBase& inport)
01606 {
01607 RTC_TRACE(("addInPort(%s)", name));
01608
01609 std::string propkey("port.inport.");
01610 propkey += name;
01611 m_properties.getNode(propkey)
01612 << m_properties.getNode("port.inport.dataport");
01613
01614 bool ret(addPort(inport));
01615
01616 if (!ret)
01617 {
01618 RTC_ERROR(("addInPort() failed."));
01619 return ret;
01620 }
01621
01622 inport.init(m_properties.getNode(propkey));
01623 m_inports.push_back(&inport);
01624 return ret;
01625 }
01626
01627 void RTObject_impl::registerInPort(const char* name,
01628 InPortBase& inport)
01629 {
01630 RTC_TRACE(("registerInPort(%s)", name));
01631
01632 if (!addInPort(name, inport))
01633 {
01634 RTC_ERROR(("addInPort(%s) failed.", name));
01635 }
01636 }
01637
01645 bool RTObject_impl::addOutPort(const char* name,
01646 OutPortBase& outport)
01647 {
01648 RTC_TRACE(("addOutPort(%s)", name));
01649
01650 std::string propkey("port.outport.");
01651 propkey += name;
01652 m_properties.getNode(propkey)
01653 << m_properties.getNode("port.outport.dataport");
01654
01655 bool ret(addPort(outport));
01656
01657 if (!ret)
01658 {
01659 RTC_ERROR(("addOutPort() failed."));
01660 return ret;
01661 }
01662
01663 outport.init(m_properties.getNode(propkey));
01664 m_outports.push_back(&outport);
01665 return ret;
01666 }
01667
01668 void RTObject_impl::registerOutPort(const char* name,
01669 OutPortBase& outport)
01670 {
01671 RTC_TRACE(("registerOutPort(%s)", name));
01672
01673 if (!addOutPort(name, outport))
01674 {
01675 RTC_ERROR(("addOutPort(%s) failed.", name));
01676 }
01677 }
01678
01686 bool RTObject_impl::removeInPort(InPortBase& inport)
01687 {
01688 RTC_TRACE(("removeInPort()"));
01689 bool ret(removePort(inport));
01690
01691 std::vector<InPortBase*>::iterator it = m_inports.begin();
01692
01693 if (ret)
01694 {
01695 while (it != m_inports.end())
01696 {
01697 if ( (*it) == &inport )
01698 {
01699 m_inports.erase(it);
01700 return true;
01701 }
01702 ++it;
01703 }
01704 }
01705
01706 return false;
01707 }
01708
01716 bool RTObject_impl::removeOutPort(OutPortBase& outport)
01717 {
01718 RTC_TRACE(("removeOutPort()"));
01719
01720 bool ret(removePort(outport));
01721
01722 if (ret)
01723 {
01724 std::vector<OutPortBase*>::iterator it = m_outports.begin();
01725 while (it != m_outports.end())
01726 {
01727 if ( (*it) == &outport )
01728 {
01729 m_outports.erase(it);
01730 return true;
01731 }
01732 ++it;
01733 }
01734 }
01735
01736 return false;
01737 }
01738
01746 bool RTObject_impl::removePort(PortBase& port)
01747 {
01748 RTC_TRACE(("removePort(PortBase&)"));
01749 onRemovePort(port.getPortProfile());
01750 return m_portAdmin.removePort(port);
01751 }
01752 bool RTObject_impl::removePort(PortService_ptr port)
01753 {
01754 RTC_TRACE(("removePort(PortService_pt)"));
01755 return m_portAdmin.removePort(port);
01756 }
01757 bool RTObject_impl::removePort(CorbaPort& port)
01758 {
01759 RTC_TRACE(("removePort(PortBase&)"));
01760 onRemovePort(port.getPortProfile());
01761 return m_portAdmin.removePort((PortBase&)port);
01762 }
01763
01764 void RTObject_impl::deletePort(PortBase& port)
01765 {
01766 RTC_TRACE(("deletePort(PortBase&)"));
01767 if (!removePort(port))
01768 RTC_ERROR(("removePort(PortBase&) failed."));
01769 return;
01770 }
01771 void RTObject_impl::deletePort(PortService_ptr port)
01772 {
01773 RTC_TRACE(("deletePort(PortService_pt)"));
01774 if (!removePort(port))
01775 RTC_ERROR(("removePort(PortService_pt) failed."));
01776 return;
01777 }
01778 void RTObject_impl::deletePort(CorbaPort& port)
01779 {
01780 RTC_TRACE(("deletePort(CorbaPort)"));
01781 if (!removePort(port))
01782 RTC_ERROR(("removePort(CorbaPort) failed."));
01783 return;
01784 }
01785
01793 void RTObject_impl::deletePortByName(const char* port_name)
01794 {
01795 RTC_TRACE(("deletePortByName(%s)", port_name));
01796 m_portAdmin.deletePortByName(port_name);
01797 return;
01798 }
01799
01807 ExecutionContext_ptr
01808 RTObject_impl::getExecutionContext(RTC::UniqueId ec_id)
01809 {
01810 return get_context(ec_id);
01811 }
01812
01820 double RTObject_impl::getExecutionRate(RTC::UniqueId ec_id)
01821 {
01822 ExecutionContext_var ec(getExecutionContext(ec_id));
01823 if (CORBA::is_nil(ec))
01824 {
01825 return 0.0;
01826 }
01827 return ec->get_rate();
01828 }
01829
01837 ReturnCode_t
01838 RTObject_impl::setExecutionRate(RTC::UniqueId ec_id, double rate)
01839 {
01840 ExecutionContext_var ec(getExecutionContext(ec_id));
01841 if (CORBA::is_nil(ec))
01842 {
01843 return RTC::RTC_ERROR;
01844 }
01845 ec->set_rate(rate);
01846 return RTC::RTC_OK;
01847 }
01848
01856 bool RTObject_impl::isOwnExecutionContext(RTC::UniqueId ec_id)
01857 {
01858 if (ec_id < ECOTHER_OFFSET)
01859 {
01860 return true;
01861 }
01862 return false;
01863 }
01864
01872 ReturnCode_t RTObject_impl::deactivate(RTC::UniqueId ec_id)
01873 {
01874 ExecutionContext_var ec(getExecutionContext(ec_id));
01875 if (CORBA::is_nil(ec))
01876 {
01877 return RTC::RTC_ERROR;
01878 }
01879 return ec->deactivate_component(::RTC::RTObject::_duplicate(getObjRef()));
01880 }
01881
01889 ReturnCode_t RTObject_impl::activate(RTC::UniqueId ec_id)
01890 {
01891 ExecutionContext_var ec(getExecutionContext(ec_id));
01892 if (CORBA::is_nil(ec))
01893 {
01894 return RTC::RTC_ERROR;
01895 }
01896 return ec->activate_component(::RTC::RTObject::_duplicate(getObjRef()));
01897 }
01898
01906 ReturnCode_t RTObject_impl::reset(RTC::UniqueId ec_id)
01907 {
01908 ExecutionContext_var ec(getExecutionContext(ec_id));
01909 if (CORBA::is_nil(ec))
01910 {
01911 return RTC::RTC_ERROR;
01912 }
01913 return ec->reset_component(::RTC::RTObject::_duplicate(getObjRef()));
01914 }
01915
01923 bool RTObject_impl::
01924 addSdoServiceProvider(const SDOPackage::ServiceProfile& prof,
01925 SdoServiceProviderBase* provider)
01926 {
01927 return m_sdoservice.addSdoServiceProvider(prof, provider);
01928 }
01929
01937 bool RTObject_impl::removeSdoServiceProvider(const char* id)
01938 {
01939 return m_sdoservice.removeSdoServiceProvider(id);
01940 }
01941
01949 bool RTObject_impl::
01950 addSdoServiceConsumer(const SDOPackage::ServiceProfile& prof)
01951 {
01952 return m_sdoservice.addSdoServiceConsumer(prof);
01953 }
01954
01962 bool RTObject_impl::removeSdoServiceConsumer(const char* id)
01963 {
01964 return m_sdoservice.removeSdoServiceConsumer(id);
01965 }
01966
01976 bool RTObject_impl::readAll()
01977 {
01978 RTC_TRACE(("readAll()"));
01979 std::vector<InPortBase*>::iterator it = m_inports.begin();
01980 std::vector<InPortBase*>::iterator it_end = m_inports.end();
01981 bool ret(true);
01982
01983 while( it != it_end )
01984 {
01985
01986 if (!((*it)->read()))
01987 {
01988 RTC_DEBUG(("The error occurred in readAll()."));
01989 ret = false;
01990 if (!m_readAllCompletion)
01991 return false;
01992 }
01993 ++it;
01994 }
01995
01996 return ret;
01997 }
01998
02008 bool RTObject_impl::writeAll()
02009 {
02010 RTC_TRACE(("writeAll()"));
02011 std::vector<OutPortBase*>::iterator it = m_outports.begin();
02012 std::vector<OutPortBase*>::iterator it_end = m_outports.end();
02013
02014 bool ret(true);
02015
02016 while( it != it_end )
02017 {
02018 if (!((*it)->write()))
02019 {
02020 RTC_DEBUG(("The error occurred in writeAll()."));
02021 ret = false;
02022 if (!m_writeAllCompletion)
02023 return false;
02024 }
02025 ++it;
02026 }
02027 return ret;
02028 }
02029
02054 void RTObject_impl::setReadAll(bool read, bool completion)
02055 {
02056 m_readAll = read;
02057 m_readAllCompletion = completion;
02058 }
02059
02084 void RTObject_impl::setWriteAll(bool write, bool completion)
02085 {
02086 m_writeAll = write;
02087 m_writeAllCompletion = completion;
02088 }
02089
02097 void RTObject_impl::finalizePorts()
02098 {
02099 RTC_TRACE(("finalizePorts()"));
02100 m_portAdmin.finalizePorts();
02101 m_inports.clear();
02102 m_outports.clear();
02103 }
02104
02105 void RTObject_impl::finalizeContexts()
02106 {
02107 RTC_TRACE(("finalizeContexts()"));
02108 for (int i(0), len(m_eclist.size()); i < len; ++i)
02109 {
02110 m_eclist[i]->stop();
02111 try
02112 {
02113 PortableServer::ObjectId_var oid
02114 = m_pPOA->servant_to_id(m_eclist[i]);
02115 m_pPOA->deactivate_object(oid);
02116 }
02117 catch (PortableServer::POA::ServantNotActive &e)
02118 {
02119 RTC_ERROR(("%s", e._name()));
02120 }
02121 catch (PortableServer::POA::WrongPolicy &e)
02122 {
02123 RTC_ERROR(("%s", e._name()));
02124 }
02125 catch (...)
02126 {
02127
02128 RTC_ERROR(("Unknown exception caught."));
02129 }
02130 delete m_eclist[i];
02131 }
02132 if (!m_eclist.empty())
02133 {
02134 m_eclist.clear();
02135 }
02136 }
02137
02147 void RTObject_impl::
02148 addPreComponentActionListener(PreComponentActionListenerType listener_type,
02149 PreComponentActionListener* listener,
02150 bool autoclean)
02151 {
02152 m_actionListeners.
02153 preaction_[listener_type].addListener(listener, autoclean);
02154 }
02155
02156
02166 void RTObject_impl::
02167 removePreComponentActionListener(
02168 PreComponentActionListenerType listener_type,
02169 PreComponentActionListener* listener)
02170 {
02171 m_actionListeners.
02172 preaction_[listener_type].removeListener(listener);
02173 }
02174
02175
02185 void RTObject_impl::
02186 addPostComponentActionListener(
02187 PostComponentActionListenerType listener_type,
02188 PostComponentActionListener* listener,
02189 bool autoclean)
02190 {
02191 m_actionListeners.
02192 postaction_[listener_type].addListener(listener, autoclean);
02193 }
02194
02195
02205 void RTObject_impl::
02206 removePostComponentActionListener(
02207 PostComponentActionListenerType listener_type,
02208 PostComponentActionListener* listener)
02209 {
02210 m_actionListeners.
02211 postaction_[listener_type].removeListener(listener);
02212 }
02213
02223 void RTObject_impl::
02224 addPortActionListener(PortActionListenerType listener_type,
02225 PortActionListener* listener,
02226 bool autoclean)
02227 {
02228 m_actionListeners.
02229 portaction_[listener_type].addListener(listener, autoclean);
02230 }
02231
02232
02242 void RTObject_impl::
02243 removePortActionListener(PortActionListenerType listener_type,
02244 PortActionListener* listener)
02245 {
02246 m_actionListeners.
02247 portaction_[listener_type].removeListener(listener);
02248 }
02249
02250
02260 void RTObject_impl::
02261 addExecutionContextActionListener(ECActionListenerType listener_type,
02262 ECActionListener* listener,
02263 bool autoclean)
02264 {
02265 m_actionListeners.
02266 ecaction_[listener_type].addListener(listener, autoclean);
02267 }
02268
02269
02279 void RTObject_impl::
02280 removeExecutionContextActionListener(ECActionListenerType listener_type,
02281 ECActionListener* listener)
02282 {
02283 m_actionListeners.
02284 ecaction_[listener_type].removeListener(listener);
02285 }
02286
02294 void RTObject_impl::
02295 addPortConnectListener(PortConnectListenerType listener_type,
02296 PortConnectListener* listener,
02297 bool autoclean)
02298 {
02299 m_portconnListeners.
02300 portconnect_[listener_type].addListener(listener, autoclean);
02301 }
02302
02310 void RTObject_impl::
02311 removePortConnectListener(PortConnectListenerType listener_type,
02312 PortConnectListener* listener)
02313 {
02314 m_portconnListeners.
02315 portconnect_[listener_type].removeListener(listener);
02316 }
02317
02325 void RTObject_impl::
02326 addPortConnectRetListener(PortConnectRetListenerType listener_type,
02327 PortConnectRetListener* listener,
02328 bool autoclean)
02329 {
02330 m_portconnListeners.
02331 portconnret_[listener_type].addListener(listener, autoclean);
02332 }
02333
02341 void RTObject_impl::
02342 removePortConnectRetListener(PortConnectRetListenerType listener_type,
02343 PortConnectRetListener* listener)
02344 {
02345 m_portconnListeners.
02346 portconnret_[listener_type].removeListener(listener);
02347 }
02348
02356 void RTObject_impl::
02357 addConfigurationParamListener(ConfigurationParamListenerType type,
02358 ConfigurationParamListener* listener,
02359 bool autoclean)
02360 {
02361 m_configsets.addConfigurationParamListener(type, listener, autoclean);
02362 }
02363
02371 void RTObject_impl::
02372 removeConfigurationParamListener(ConfigurationParamListenerType type,
02373 ConfigurationParamListener* listener)
02374 {
02375 m_configsets.removeConfigurationParamListener(type, listener);
02376 }
02377
02385 void RTObject_impl::
02386 addConfigurationSetListener(ConfigurationSetListenerType type,
02387 ConfigurationSetListener* listener,
02388 bool autoclean)
02389 {
02390 m_configsets.addConfigurationSetListener(type, listener, autoclean);
02391 }
02392
02400 void RTObject_impl::
02401 removeConfigurationSetListener(ConfigurationSetListenerType type,
02402 ConfigurationSetListener* listener)
02403 {
02404 m_configsets.removeConfigurationSetListener(type, listener);
02405 }
02406
02414 void RTObject_impl::
02415 addConfigurationSetNameListener(ConfigurationSetNameListenerType type,
02416 ConfigurationSetNameListener* listener,
02417 bool autoclean)
02418 {
02419 m_configsets.addConfigurationSetNameListener(type, listener, autoclean);
02420 }
02421
02429 void RTObject_impl::
02430 removeConfigurationSetNameListener(ConfigurationSetNameListenerType type,
02431 ConfigurationSetNameListener* listener)
02432 {
02433 m_configsets.removeConfigurationSetNameListener(type, listener);
02434 }
02435
02436
02444 void RTObject_impl::shutdown()
02445 {
02446 RTC_TRACE(("shutdown()"));
02447 try
02448 {
02449 finalizePorts();
02450 finalizeContexts();
02451 PortableServer::ObjectId_var oid1;
02452 oid1 = m_pPOA->servant_to_id(m_pSdoConfigImpl);
02453 PortableServer::ObjectId_var oid2;
02454 oid2 = m_pPOA->servant_to_id(this);
02455 m_pPOA->deactivate_object(oid1);
02456 m_pPOA->deactivate_object(oid2);
02457 }
02458 catch (PortableServer::POA::ServantNotActive &e)
02459 {
02460 RTC_ERROR(("%s", e._name()));
02461 }
02462 catch (PortableServer::POA::WrongPolicy &e)
02463 {
02464 RTC_ERROR(("%s", e._name()));
02465 }
02466 catch (...)
02467 {
02468
02469 RTC_ERROR(("Unknown exception caught."));
02470 }
02471
02472 if (m_pManager != NULL)
02473 {
02474 RTC_DEBUG(("Cleanup on Manager"));
02475 m_pManager->notifyFinalized(this);
02476 }
02477 }
02478
02479
02480
02481 }