summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Concurrency/NS_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/Concurrency/NS_client.cpp')
-rw-r--r--TAO/orbsvcs/tests/Concurrency/NS_client.cpp214
1 files changed, 214 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Concurrency/NS_client.cpp b/TAO/orbsvcs/tests/Concurrency/NS_client.cpp
new file mode 100644
index 00000000000..16dea85c540
--- /dev/null
+++ b/TAO/orbsvcs/tests/Concurrency/NS_client.cpp
@@ -0,0 +1,214 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/orbsvcs/bin/Naming_Service/TAO
+//
+// = FILENAME
+// clnt.cpp
+//
+// = DESCRIPTION
+// This class implements a simple CORBA client for the CosNaming
+// example using stubs generated by the TAO ORB IDL compiler.
+//
+// = AUTHORS
+// Sergio Flores-Gaitan <sergio@cs.wustl.edu>
+// Torben Worm <tworm@cs.wustl.edu>
+//
+// ============================================================================
+
+#include "NS_client.h"
+#include "tao/debug.h"
+#include <stdio.h>
+
+ACE_RCSID(Concurrency, NS_client, "$Id$")
+
+// constructor
+
+CosNaming_Client::CosNaming_Client (void)
+ : list_contents_ (0),
+ resolve_name_ (0),
+ name_to_resolve_ (0),
+ context_to_resolve_ (0),
+ argc_ (0),
+ argv_ (0),
+ exit_later_ (0)
+{
+}
+
+// Parses the command line arguments and returns an error status.
+
+int
+CosNaming_Client::parse_args (void)
+{
+ ACE_Get_Opt get_opts (argc_, argv_, "dxn:c:l");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'd': // debug flag
+ TAO_debug_level++;
+ break;
+ case 'l':
+ this->list_contents_ = 1;
+ break;
+ case 'x':
+ this->exit_later_++;
+ break;
+ case 'n':
+ this->resolve_name_ = 1;
+ this->name_to_resolve_ = get_opts.opt_arg ();
+ break;
+ case 'c':
+ this->resolve_name_ = 1;
+ this->context_to_resolve_ = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s"
+ " [-d]"
+ " [-x]"
+ "\n",
+ this->argv_ [0]),
+ -1);
+ }
+
+ // Indicates successful parsing of command line.
+ return 0;
+}
+
+// Execute client example code.
+
+int
+CosNaming_Client::run (void)
+{
+ // @@ TODO, add some interesting test here, maybe creating some
+ // nested naming contexts and registering a number of objreferences
+ // in there. We could even use the iterators.
+
+ if (this->resolve_name_)
+ resolve_name (this->context_to_resolve_,
+ this->name_to_resolve_);
+
+ if (this->list_contents_)
+ list_contents ();
+
+ return 0;
+}
+
+CosNaming_Client::~CosNaming_Client (void)
+{
+}
+
+int
+CosNaming_Client::resolve_name (char *c, char *n)
+{
+ TAO_TRY
+ {
+ CosNaming::Name name (2);
+ name.length (2);
+ name[0].id = CORBA::string_dup (c);
+ name[1].id = CORBA::string_dup (n);
+ CORBA::Object_var obj = this->my_name_client_->resolve (name,
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ if (CORBA::is_nil (obj.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Could not resolve name in Naming service <%s>\n"),
+ -1);
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("init");
+ return -1;
+ }
+ TAO_ENDTRY;
+ return 0;
+}
+
+void
+CosNaming_Client::list_contents (void)
+{
+ CosNaming::BindingIterator_var bi;
+ CosNaming::BindingList_var li;
+ CORBA::ULong how_many = 0;
+ CosNaming::Binding_var b;
+ CosNaming::Name n;
+ CORBA::ULong names = 0;
+
+ TAO_TRY
+ {
+ this->my_name_client_->list (how_many, li, bi, TAO_TRY_ENV);
+
+ while (bi->next_one (b, TAO_TRY_ENV))
+ {
+ n = b->binding_name;
+ names = n.length ();
+ ACE_DEBUG ((LM_DEBUG,
+ " (%i) Name: ",
+ names));
+
+ for (CORBA::ULong i = 0; i < names; i++)
+ ACE_DEBUG ((LM_DEBUG,
+ "%s ",
+ n[i].id._retn ()));
+
+ ACE_DEBUG ((LM_DEBUG, "type: %s\n",
+ b->binding_type == CosNaming::ncontext ? "C" : "O"));
+ }
+ }
+ TAO_CATCHANY
+ {
+ }
+ TAO_ENDTRY;
+}
+
+int
+CosNaming_Client::init (int argc, char *argv[])
+{
+ this->argc_ = argc;
+ this->argv_ = argv;
+
+ TAO_TRY
+ {
+ // Initialize ORB.
+ this->orb_ = CORBA::ORB_init (argc, argv, "internet", TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ // Initialize the naming services
+ if (my_name_client_.init (orb_) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Unable to initialize "
+ "the TAO_Naming_Client. \n"),
+ -1);
+
+ // Parse command line and verify parameters.
+ if (this->parse_args () == -1)
+ return -1;
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("init");
+ return -1;
+ }
+ TAO_ENDTRY;
+
+ return 0;
+}
+
+// This function runs the test.
+
+int
+main (int argc, char **argv)
+{
+ CosNaming_Client cosnaming_client;
+
+ if (cosnaming_client.init (argc, argv) == -1)
+ return 1;
+
+ return cosnaming_client.run ();
+}