void DSI_Simple_Server::invoke (CORBA::ServerRequest_ptr request, TAO_AMH_DSI_Response_Handler * rph) { CORBA::NVList_ptr opList; this->orb_->create_list (0, opList); request->arguments (opList); CORBA::Request_var target_request; this->target_->_create_request (0, // ctx request->operation (), opList, 0, // result 0, // exception_list, 0, // context_list, target_request.inout (), 0); target_request->_tao_lazy_evaluation (1); // Outgoing request must have the same byte order as the incoming one. target_request->_tao_byte_order (request->_tao_incoming_byte_order ()); try { // Updates the byte order state, if necessary. TAO_DII_Reply_Handler_ptr rh_ptr; ACE_NEW (rh_ptr, My_DII_Reply_Handler (rph, this->orb_)); TAO_DII_Reply_Handler_var rh(rh_ptr); target_request->sendc (rh.in()); } catch (const CORBA::UNKNOWN&) { // Outgoing reply must have the same byte order as the incoming one. request->_tao_reply_byte_order (target_request->_tao_byte_order ()); request->gateway_exception_reply ( target_request->raw_user_exception ()); return; } // Outgoing reply must have the same byte order as the incoming one. request->_tao_reply_byte_order (target_request->_tao_byte_order ()); if (ACE_OS::strcmp ("shutdown", request->operation ()) == 0) { this->orb_->shutdown (0); } }
void DSI_Simple_Server::invoke (CORBA::ServerRequest_ptr request) { CORBA::NVList_ptr list; this->orb_->create_list (0, list); request->arguments (list); CORBA::Request_var target_request; this->target_->_create_request (0, // ctx request->operation (), list, 0, // result 0, // exception_list, 0, // context_list, target_request.inout (), 0); target_request->_tao_lazy_evaluation (1); // Outgoing request must have the same byte order as the incoming one. target_request->_tao_byte_order (request->_tao_incoming_byte_order ()); try { // Updates the byte order state, if necessary. target_request->invoke (); } catch (const CORBA::UNKNOWN&) { // Outgoing reply must have the same byte order as the incoming one. request->_tao_reply_byte_order (target_request->_tao_byte_order ()); request->gateway_exception_reply (target_request->raw_user_exception ()); return; } // Outgoing reply must have the same byte order as the incoming one. request->_tao_reply_byte_order (target_request->_tao_byte_order ()); if (ACE_OS::strcmp ("shutdown", request->operation ()) == 0) { this->orb_->shutdown (0); } }
// The DSI invoke request void TAO_CEC_DynamicImplementationServer::invoke (CORBA::ServerRequest_ptr request) { // Trap the _is_a request if (ACE_OS::strcmp ("_is_a", request->operation () ) == 0) { this->is_a (request); } else { CORBA::NVList_ptr list; // Get the operation paramter information from the IFR cache. TAO_CEC_Operation_Params *oper_params = this->typed_event_channel_->find_from_ifr_cache (request->operation () ); if (oper_params == 0) { if (TAO_debug_level >= 10) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("***** Operation not found in IFR cache *****\n"))); } this->typed_event_channel_->create_list (0, list); } else { // Populate the NVList from the parameter information. this->typed_event_channel_->create_operation_list (oper_params, list); // Get the operation arguments. This ahould demarshal correctly. request->arguments (list); // Populate the TypedEvent with the list and operation name. TAO_CEC_TypedEvent typed_event (list, request->operation () ); // Pass the TypedEvent to the TypedProxyPushConsumer this->typed_pp_consumer_->invoke (typed_event); } } }
void TAO_CEC_DynamicImplementationServer::is_a (CORBA::ServerRequest_ptr request) { CORBA::NVList_ptr list; this->typed_event_channel_->create_list (0, list); CORBA::Any any_1; any_1._tao_set_typecode(CORBA::_tc_string); list->add_value ("value", any_1, CORBA::ARG_IN); request->arguments (list); CORBA::NamedValue_ptr nv = list->item (0); CORBA::Any_ptr ap = nv->value (); const char *value = 0; *ap >>= value; if (TAO_debug_level >= 10) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("***** TAO_CEC_DynamicImplementationServer::is_a called with value %s *****\n"), value)); } const char *object_id = CORBA::_tc_Object->id (); if (TAO_debug_level >= 10) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("***** is_a using Server's RepositoryId %s *****\n"), this->repository_id_)); ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("***** is_a using base interface %s *****\n"), object_id)); } CORBA::Boolean result = 0; if (ACE_OS::strcmp (value, this->repository_id_) == 0 || ACE_OS::strcmp (value, object_id) == 0) { result = 1; } else { CORBA::ULong num = this->typed_event_channel_->number_of_base_interfaces (); for (CORBA::ULong base=0; base<num; base++) { if (TAO_debug_level >= 10) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("***** is_a using base interface %s *****\n"), this->typed_event_channel_->base_interfaces (base) )); } if (ACE_OS::strcmp (value, this->typed_event_channel_->base_interfaces (base) ) == 0) { result = 1; } } } if (TAO_debug_level >= 10) { ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("***** is_a returning %d *****\n"), result)); } CORBA::Any result_any; CORBA::Any::from_boolean from_boolean (result); result_any <<= from_boolean; request->set_result (result_any); }