diff options
author | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-03-04 23:15:20 +0000 |
---|---|---|
committer | nobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-03-04 23:15:20 +0000 |
commit | bf6f160aca86a102694a47dc6f490b90158e4fc8 (patch) | |
tree | 3675bf549dc0cf7649bc81f934a25376f72bfa98 /TAO/CIAO/DAnCE/RTNodeApplication/NodeApplication_Task.cpp | |
parent | 55b9df75cdae298ca921cff58503782fd67e075b (diff) | |
download | ATCD-bf6f160aca86a102694a47dc6f490b90158e4fc8.tar.gz |
This commit was manufactured by cvs2svn to create branch
'xsc_handler_1'.
Diffstat (limited to 'TAO/CIAO/DAnCE/RTNodeApplication/NodeApplication_Task.cpp')
-rw-r--r-- | TAO/CIAO/DAnCE/RTNodeApplication/NodeApplication_Task.cpp | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/TAO/CIAO/DAnCE/RTNodeApplication/NodeApplication_Task.cpp b/TAO/CIAO/DAnCE/RTNodeApplication/NodeApplication_Task.cpp new file mode 100644 index 00000000000..8272e2a87f9 --- /dev/null +++ b/TAO/CIAO/DAnCE/RTNodeApplication/NodeApplication_Task.cpp @@ -0,0 +1,153 @@ +// $Id$ + +#include "ciao/NodeApplication_CallBackC.h" +#include "NodeApplication_Task.h" +#include "tao/RTPortableServer/RTPortableServer.h" +#include "RTServer_Impl.h" +#include "ace/Null_Mutex.h" +#include "ciao/CIAO_common.h" +#include "tao/RTPortableServer/RTPortableServer.h" + +#if !defined (__ACE_INLINE__) +# include "NodeApplication_Task.inl" +#endif /* __ACE_INLINE__ */ + +int +CIAO::NodeApplication_Task::svc () +{ + ACE_TRY_NEW_ENV + { + CORBA::Object_var object = + this->orb_->resolve_initial_references ("RTORB" + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + RTCORBA::RTORB_var rt_orb = + RTCORBA::RTORB::_narrow (object.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + object = + this->orb_->resolve_initial_references ("RootPOA" + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (object.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + PortableServer::POAManager_var poa_manager = + root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + // ... + CIAO::RTServer::RTNodeApplication_Impl *nodeapp_servant; + + ACE_NEW_RETURN (nodeapp_servant, + CIAO::RTServer::RTNodeApplication_Impl (this->orb_.in (), + rt_orb.in (), + root_poa.in ()), + -1); + + PortableServer::ServantBase_var safe_servant (nodeapp_servant); + + // Configuring NodeApplication. + PortableServer::ObjectId_var cs_oid + = root_poa->activate_object (nodeapp_servant + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + object = root_poa->id_to_reference (cs_oid.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + Deployment::NodeApplication_var nodeapp_obj = + Deployment::NodeApplication::_narrow (object.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (nodeapp_obj.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + "Unable to activate RTNodeApplication object\n"), + -1); + + /** @@ We need to call NodeApplication servant's init method. + * But it's not sure to me where exactly we can get the + * Properties needed by the init method at this moment. There are two + * ways to set the property of the NodeApplication: + * 1. call init remotely from NodeApplicationManager + * 2. call init locally on the servant of NodeApplication. + */ + + if (nodeapp_servant->init (ACE_ENV_SINGLE_ARG_PARAMETER)) + { + ACE_DEBUG ((LM_DEBUG, "NodeApplication Failed on creating and\ + initializing the session container!")); + return 1; + } + ACE_TRY_CHECK; + + CORBA::String_var str = this->orb_->object_to_string (nodeapp_obj.in () + ACE_ENV_ARG_PARAMETER); + + if (this->options_.ior_output_filename_.length () != 0) + CIAO::Utility::write_IOR (this->options_.ior_output_filename_.c_str (), + str.in ()); + + // End Deployment part + if (CIAO::debug_level () > 10) + { + ACE_DEBUG ((LM_INFO, "RTNodeApplication IOR: %s\n", str.in ())); + + } + + Deployment::NodeApplicationManager_var nodeapp_man; + Deployment::Properties_var prop = new Deployment::Properties; + + if (this->options_.use_callback_) + { + object = this->orb_->string_to_object (this->options_.callback_ior_.c_str () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CIAO::NodeApplication_Callback_var nam_callback + = CIAO::NodeApplication_Callback::_narrow (object.in () + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + Deployment::Properties_out properties_out (prop.out ()); + + nodeapp_man + = nam_callback->register_node_application (nodeapp_obj.in (), + properties_out + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + + ACE_DEBUG ((LM_DEBUG, + "Running RTNodeApplication...\n")); + + this->orb_->run (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + root_poa->destroy (1, 1 ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + this->orb_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught"); + return -1; + } + ACE_ENDTRY; + + ACE_DEBUG ((LM_DEBUG, + "Exiting RTNodeApplication...\n")); + return 0; +} |