void DSI_Simple_Server::_dispatch (TAO_ServerRequest &request, TAO::Portable_Server::Servant_Upcall *) { // No need to do any of this if the client isn't waiting. if (request.response_expected ()) { if (!CORBA::is_nil (request.forward_location ())) { request.init_reply (); request.tao_send_reply (); // No need to invoke in this case. return; } else if (request.sync_with_server ()) { // The last line before the call to this function // was an ACE_CHECK_RETURN, so if we're here, we // know there is no exception so far, and that's all // a SYNC_WITH_SERVER client request cares about. request.send_no_exception_reply (); } } // Create DSI request object. CORBA::ServerRequest *dsi_request = 0; ACE_NEW (dsi_request, CORBA::ServerRequest (request)); try { TAO_AMH_DSI_Response_Handler_ptr rh_ptr; ACE_NEW (rh_ptr, TAO_AMH_DSI_Response_Handler(request)); TAO_AMH_DSI_Response_Handler_var rh(rh_ptr); rh->init (request, 0); // Delegate to user. this->invoke (dsi_request, rh.in()); } catch (const CORBA::Exception& ex) { // Only if the client is waiting. if (request.response_expected () && !request.sync_with_server ()) { request.tao_send_reply_exception (ex); } } CORBA::release (dsi_request); }
void ImR_DSI_Forwarder::_dispatch (TAO_ServerRequest &request, TAO::Portable_Server::Servant_Upcall * /*context */ ) { // No need to do any of this if the client isn't waiting. if (request.response_expected ()) { if (!CORBA::is_nil (request.forward_location ())) { request.init_reply (); request.tao_send_reply (); // No need to invoke in this case. return; } } // Create DSI request object. CORBA::ServerRequest *dsi_request = 0; ACE_NEW (dsi_request, CORBA::ServerRequest (request)); try { TAO_AMH_DSI_Response_Handler_ptr rhp; ACE_NEW (rhp, TAO_AMH_DSI_Response_Handler(request)); TAO_AMH_DSI_Response_Handler_var rh(rhp); rh->init (request, 0); // Delegate to user. this->invoke (dsi_request, rh.in()); } catch (const CORBA::Exception& ex) { // Only if the client is waiting. if (request.response_expected () && !request.sync_with_server ()) { request.tao_send_reply_exception (ex); } } CORBA::release (dsi_request); }