diff options
Diffstat (limited to 'TAO/examples/POA/Forwarding/client.cpp')
-rw-r--r-- | TAO/examples/POA/Forwarding/client.cpp | 116 |
1 files changed, 62 insertions, 54 deletions
diff --git a/TAO/examples/POA/Forwarding/client.cpp b/TAO/examples/POA/Forwarding/client.cpp index b77c7f2b645..94bf8b5ffa1 100644 --- a/TAO/examples/POA/Forwarding/client.cpp +++ b/TAO/examples/POA/Forwarding/client.cpp @@ -33,20 +33,18 @@ read_ior (char *filename) { // Open the file for reading. ACE_HANDLE f_handle_ = ACE_OS::open (filename,0); - + if (f_handle_ == ACE_INVALID_HANDLE) ACE_ERROR_RETURN ((LM_ERROR, "Unable to open %s for reading: %p\n", - filename, - "ACE_OS::open"), + filename), -1); ACE_Read_Buffer ior_buffer (f_handle_); server_IOR_ = ior_buffer.read (); - + if (server_IOR_ == 0) ACE_ERROR_RETURN ((LM_ERROR, - "Unable to allocate memory to read ior: %p\n", - "ACE_Read_Buffer::read"), + "Unable to allocate memory to read ior: %p\n"), -1); return 0; } @@ -66,8 +64,7 @@ parse_args (int argc, char **argv) if (result < 0) ACE_ERROR_RETURN ((LM_ERROR, "Unable to read ior from %s : %p\n", - get_opts.optarg, - "read_ior"), + get_opts.optarg), -1); break; case 'k': @@ -85,81 +82,92 @@ parse_args (int argc, char **argv) argv [0]), -1); } - + if (server_IOR_ == 0) ACE_ERROR_RETURN ((LM_ERROR, "Please specify the IOR for the servant\n"), -1); - + // Indicates successful parsing of command line. return 0; } -void -do_calls (Foo_ptr foo_ptr, - CORBA::Environment &ACE_TRY_ENV) +int do_calls (Foo_ptr foo_ptr) { + // CORBA::Environment env; + ACE_DECLARE_NEW_CORBA_ENV; + + CORBA::Long result = 0; + for (int i = 1; i <= iterations; i++) { // About half way through if (i % 3 == 0) { foo_ptr->forward (ACE_TRY_ENV); - ACE_CHECK; + ACE_CHECK_RETURN (-1); } else { // Invoke the doit() method of the foo reference. - CORBA::Long result = foo_ptr->doit (ACE_TRY_ENV); - ACE_CHECK; - - // Print the result of doit () method of the foo reference. - ACE_DEBUG ((LM_DEBUG, - "doit() returned %d \n", - result)); + result = foo_ptr->doit (ACE_TRY_ENV); + // If exception + if (ACE_TRY_ENV.exception () != 0) + { + ACE_TRY_ENV.print_exception ("calling doit"); + } + else + // Print the result of doit () method of the foo + // reference. + ACE_DEBUG ((LM_DEBUG, + "doit() returned %d \n", + result)); } } + + // In case you want to shutdown your server + // foo_ptr->shutdown (env); + // If exception + // if (env.exception () != 0) + // { + // env.print_exception ("calling shutdown"); + // } + return 0; } int main (int argc, char **argv) { + // @@ Michael, this function is too long. Can you please break it + // up into multiple smaller functions. + //CORBA::Environment env; ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Initialize the ORB - CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, 0, ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Initialize options based on command-line arguments. - int parse_args_result = parse_args (argc, argv); - if (parse_args_result != 0) - return parse_args_result; - - // Get an object reference from the argument string. - CORBA::Object_var object = orb->string_to_object (server_IOR_, ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Try to narrow the object reference to a Foo reference. - Foo_var foo_var = Foo::_narrow (object.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - CORBA::String_var original_location = - orb->object_to_string (foo_var.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - do_calls (foo_var.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught"); - return -1; - } - ACE_ENDTRY; + // Initialize the ORB + CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, 0, ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + + // Initialize options based on command-line arguments. + int parse_args_result = parse_args (argc, argv); + if (parse_args_result != 0) + return parse_args_result; + + // Get an object reference from the argument string. + CORBA::Object_var object = orb->string_to_object (server_IOR_, ACE_TRY_ENV); ACE_CHECK_RETURN (-1); + // Try to narrow the object reference to a Foo reference. + Foo_var foo_var = Foo::_narrow (object.in (), ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + + + CORBA::String_var original_location = + orb->object_to_string (foo_var.in (), ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + + if (do_calls (foo_var.in()) == -1) + return -1; + return 0; } + |