diff options
Diffstat (limited to 'TAO/examples/Content_Server/AMI_Observer/client.cpp')
-rw-r--r-- | TAO/examples/Content_Server/AMI_Observer/client.cpp | 153 |
1 files changed, 51 insertions, 102 deletions
diff --git a/TAO/examples/Content_Server/AMI_Observer/client.cpp b/TAO/examples/Content_Server/AMI_Observer/client.cpp index f81d307bc7f..53cfc089aeb 100644 --- a/TAO/examples/Content_Server/AMI_Observer/client.cpp +++ b/TAO/examples/Content_Server/AMI_Observer/client.cpp @@ -8,19 +8,7 @@ #include "Push_Web_ServerC.h" #include "Push_Iterator_Handler.h" -ACE_RCSID (AMI_Observer, client, "$Id$") - -// Obtain reference to Iterator_Factory -Web_Server::Iterator_Factory_ptr -get_iterator (CORBA::ORB_ptr orb, - CORBA::Environment &ACE_TRY_ENV); - -// Perform file requests -void invoke_requests (int argc, - char *argv[], - int *request_count, - Web_Server::Iterator_Factory_ptr f, - CORBA::Environment &ACE_TRY_ENV); +ACE_RCSID(AMI_Observer, client, "$Id$") int main (int argc, char *argv[]) @@ -30,8 +18,7 @@ main (int argc, char *argv[]) { if (argc < 2) ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("Usage: client filename ") - ACE_TEXT ("[filename ...]\n")), + "Usage: client filename [filename ...]\n"), -1); // Initialize the ORB. @@ -56,18 +43,40 @@ main (int argc, char *argv[]) mgr->activate (ACE_TRY_ENV); ACE_TRY_CHECK; - // Get an Iterator_Factory reference. - Web_Server::Iterator_Factory_var factory = - ::get_iterator (orb.in (), - ACE_TRY_ENV); + // Get a reference to the Name Service. + obj = orb->resolve_initial_references ("NameService", + ACE_TRY_ENV); + ACE_TRY_CHECK; + + // Narrow to a Naming Context + CosNaming::NamingContext_var nc = + CosNaming::NamingContext::_narrow (obj.in (), ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (CORBA::is_nil (obj.in ())) + { + ACE_ERROR_RETURN ((LM_ERROR, + "Nil reference to Name Service\n"), + -1); + } + + // Create a name. + CosNaming::Name name; + name.length (1); + name[0].id = CORBA::string_dup ("Push_Iterator_Factory"); + name[0].kind = CORBA::string_dup (""); + + obj = nc->resolve (name, ACE_TRY_ENV); ACE_TRY_CHECK; + // Now narrow to an Iterator_Factory reference. + Web_Server::Iterator_Factory_var factory = + Web_Server::Iterator_Factory::_narrow (obj.in ()); if (CORBA::is_nil (factory.in ())) { ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("Object pointed to by:\n %s\n") - ACE_TEXT ("is not an Iterator_Factory") - ACE_TEXT ("object.\n"), + "Object pointed to by:\n %s\n" + "is not an Iterator_Factory object.\n", argv[1]), -1); } @@ -77,12 +86,24 @@ main (int argc, char *argv[]) int request_count = 0; // Activate and run the reply handlers. - ::invoke_requests (argc, - argv, - &request_count, - factory.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; + for (int i = 0; + i < argc - 1; // Don't include the program name. + ++i) + { + Push_Iterator_Handler *handler = 0; + ACE_NEW_RETURN (handler, + Push_Iterator_Handler, + -1); + + // Transfer ownership to the POA. + PortableServer::ServantBase_var tmp_handler (handler); + + handler->run (&request_count, + argv[i + 1], + factory.in (), + ACE_TRY_ENV); + ACE_TRY_CHECK; + } // 1 millisecond delay to reduce "busy waiting" in ORB event // loop. @@ -110,15 +131,14 @@ main (int argc, char *argv[]) ACE_CATCH (Web_Server::Error_Result, exc) { ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("Caught Web Server exception ") - ACE_TEXT ("status %d\n"), + "Caught Web Server exception with status %d\n", exc.status), -1); } ACE_CATCHANY { ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, - ACE_TEXT ("Caught unexpected exception:")); + "Caught unexpected exception:"); return -1; } @@ -129,74 +149,3 @@ main (int argc, char *argv[]) return 0; } - -Web_Server::Iterator_Factory_ptr -get_iterator (CORBA::ORB_ptr o, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::ORB_var orb = CORBA::ORB::_duplicate (o); - - // Get a reference to the Name Service. - CORBA::Object_var obj = - orb->resolve_initial_references ("NameService", - ACE_TRY_ENV); - ACE_CHECK_RETURN (Web_Server::Iterator_Factory::_nil ()); - - // Narrow to a Naming Context - CosNaming::NamingContext_var nc = - CosNaming::NamingContext::_narrow (obj.in (), ACE_TRY_ENV); - ACE_CHECK_RETURN (Web_Server::Iterator_Factory::_nil ()); - - if (CORBA::is_nil (obj.in ())) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("Nil reference to Name Service\n"))); - return Web_Server::Iterator_Factory::_nil (); - } - - // Create a name. - CosNaming::Name name; - name.length (1); - name[0].id = CORBA::string_dup ("Push_Iterator_Factory"); - name[0].kind = CORBA::string_dup (""); - - obj = nc->resolve (name, ACE_TRY_ENV); - ACE_CHECK_RETURN (Web_Server::Iterator_Factory::_nil ()); - - Web_Server::Iterator_Factory_ptr factory = - Web_Server::Iterator_Factory::_narrow (obj.in ()); - - return factory; -} - -void invoke_requests (int argc, - char *argv[], - int *request_count, - Web_Server::Iterator_Factory_ptr f, - CORBA::Environment &ACE_TRY_ENV) -{ - Web_Server::Iterator_Factory_var factory = - Web_Server::Iterator_Factory::_duplicate (f); - - // Activate and run the reply handlers. - for (int i = 0; - i < argc - 1; // Don't include the program name. - ++i) - { - Push_Iterator_Handler *handler = 0; - ACE_NEW_THROW_EX (handler, - Push_Iterator_Handler, - CORBA::NO_MEMORY ()); - ACE_CHECK; - - // Transfer ownership to the POA. - PortableServer::ServantBase_var tmp (handler); - - // This ends up being an AMI call, so it won't block. - handler->run (request_count, - argv[i + 1], - factory.in (), - ACE_TRY_ENV); - ACE_CHECK; - } -} |