summaryrefslogtreecommitdiff
path: root/TAO/tests/Param_Test/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tests/Param_Test/server.cpp')
-rw-r--r--TAO/tests/Param_Test/server.cpp176
1 files changed, 176 insertions, 0 deletions
diff --git a/TAO/tests/Param_Test/server.cpp b/TAO/tests/Param_Test/server.cpp
new file mode 100644
index 00000000000..f519529eb28
--- /dev/null
+++ b/TAO/tests/Param_Test/server.cpp
@@ -0,0 +1,176 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/Param_Test
+//
+// = FILENAME
+// server.cpp
+//
+// = AUTHOR
+// Aniruddha Gokhale
+//
+// ============================================================================
+
+#include "param_test_i.h"
+#include "tao/debug.h"
+#include "ace/Get_Opt.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_stdio.h"
+
+ACE_RCSID (Param_Test,
+ server,
+ "$Id$")
+
+// Parses the command line arguments and returns an error status.
+static FILE *ior_output_file = 0;
+static const char *ior_output_filename = "test.ior";
+
+static int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "do:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'd': // debug flag
+ TAO_debug_level++;
+ break;
+ case 'o':
+ ior_output_filename = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s"
+ " [-d]"
+ "\n", argv [0]), 1);
+ }
+
+ return 0; // Indicates successful parsing of command line
+}
+
+// Standard command line parsing utilities used.
+
+int
+main (int argc, char *argv[])
+{
+ PortableServer::POA_var oa_ptr;
+ Param_Test_i *param_test = 0;
+
+ try
+ {
+ const char *orb_name = "";
+ CORBA::ORB_var orb_ptr =
+ CORBA::ORB_init (argc, argv, orb_name);
+
+ CORBA::Object_var temp; // holder for the myriad of times we get
+ // an object which we then have to narrow.
+
+ // Get the Root POA
+
+ temp = orb_ptr->resolve_initial_references ("RootPOA");
+
+ if (CORBA::is_nil (temp.in()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%P|%t) Unable to get root poa reference.\n"),
+ 1);
+
+ oa_ptr = PortableServer::POA::_narrow (temp.in());
+
+ PortableServer::POAManager_var poa_manager =
+ oa_ptr->the_POAManager ();
+
+ CORBA::PolicyList policies (2);
+ policies.length (2);
+ policies[0] =
+ oa_ptr->create_id_assignment_policy (PortableServer::USER_ID);
+
+ policies[1] =
+ oa_ptr->create_lifespan_policy (PortableServer::PERSISTENT);
+
+ // We use a different POA, otherwise the user would have to
+ // change the object key each time it invokes the server.
+ PortableServer::POA_var good_poa =
+ oa_ptr->create_POA ("child_poa",
+ poa_manager.in (),
+ policies);
+
+ // Parse remaining command line and verify parameters.
+ parse_args (argc, argv);
+
+ // initialize a param_test target object and register it with the object
+ // adapter
+
+ // Create the implementation object
+ ACE_NEW_RETURN (param_test,
+ Param_Test_i ("unknown",
+ orb_ptr.in ()), 1);
+
+ // Register with GoodPOA with a specific name
+ PortableServer::ObjectId_var id =
+ PortableServer::string_to_ObjectId ("param_test");
+ good_poa->activate_object_with_id (id.in (),
+ param_test);
+
+ // Stringify the objref we'll be implementing, and print it to
+ // stdout. Someone will take that string and give it to a
+ // client. Then release the object.
+
+ temp = good_poa->id_to_reference (id.in ());
+
+ CORBA::String_var str =
+ orb_ptr->object_to_string (temp.in ());
+
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) The IOR is <%s>\n",
+ str.in ()));
+ }
+
+ ior_output_file = ACE_OS::fopen (ior_output_filename, "w");
+
+ if (ior_output_file == 0)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to open %s for writing: %p\n",
+ ior_output_filename),
+ -1);
+ }
+
+ ACE_OS::fprintf (ior_output_file,
+ "%s",
+ str.in ());
+ ACE_OS::fclose (ior_output_file);
+
+
+ // Make the POAs controlled by this manager active
+ poa_manager->activate ();
+
+ orb_ptr->run ();
+
+ good_poa->destroy (1,
+ 1);
+
+ oa_ptr->destroy (1,
+ 1);
+ }
+ catch (const CORBA::SystemException& sysex)
+ {
+ sysex._tao_print_exception ("System Exception");
+ return -1;
+ }
+ catch (const CORBA::UserException& userex)
+ {
+ userex._tao_print_exception ("User Exception");
+ return -1;
+ }
+ // Free resources
+ delete param_test;
+
+ return 0;
+}