summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/ImplRepo/nestea_server_i.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/ImplRepo/nestea_server_i.cpp')
-rw-r--r--TAO/orbsvcs/tests/ImplRepo/nestea_server_i.cpp175
1 files changed, 175 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/ImplRepo/nestea_server_i.cpp b/TAO/orbsvcs/tests/ImplRepo/nestea_server_i.cpp
new file mode 100644
index 00000000000..bb1f5982972
--- /dev/null
+++ b/TAO/orbsvcs/tests/ImplRepo/nestea_server_i.cpp
@@ -0,0 +1,175 @@
+// $Id$
+
+#include "nestea_server_i.h"
+#include "ace/Get_Opt.h"
+#include "ace/Read_Buffer.h"
+
+ACE_RCSID(ImplRepo, nestea_server_i, "$Id$")
+
+Nestea_Server_i::Nestea_Server_i (void)
+ : server_impl_ (0),
+ ior_output_file_ (0),
+ ir_helper_ (0),
+ register_with_ir_ (0),
+ use_ir_ (0)
+{
+ // Nothing
+}
+
+int
+Nestea_Server_i::parse_args (void)
+{
+ ACE_Get_Opt get_opts (this->argc_, this->argv_, "do:ir");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'd': // debug flag.
+ TAO_debug_level++;
+ break;
+ case 'r': // Register restart information with the IR.
+ this->register_with_ir_ = 1;
+ break;
+ case 'i': // Use the IR
+ this->use_ir_ = 1;
+ break;
+ case 'o': // output the IOR to a file.
+ this->ior_output_file_ = ACE_OS::fopen (get_opts.optarg, "w");
+ if (this->ior_output_file_ == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to open %s for writing: %p\n",
+ get_opts.optarg), -1);
+ break;
+ case '?': // display help for use of the server.
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s"
+ " [-d]"
+ " [-i]"
+ " [-r]"
+ " [-o] <ior_output_file>"
+ "\n",
+ argv_ [0]),
+ 1);
+ }
+
+ // Indicates successful parsing of command line.
+ return 0;
+}
+
+int
+Nestea_Server_i::init (int argc, char** argv, CORBA::Environment& TAO_IN_ENV)
+{
+ char poa_name[] = "nestea_server";
+
+ TAO_TRY
+ {
+ // Call the init of <TAO_ORB_Manager> to initialize the ORB and
+ // create a child POA under the root POA.
+ if (this->orb_manager_.init_child_poa (argc, argv, poa_name, TAO_TRY_ENV) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "init_child_poa"), -1);
+
+ TAO_CHECK_ENV;
+
+ this->argc_ = argc;
+ this->argv_ = argv;
+
+ int retval = this->parse_args ();
+
+ if (retval != 0)
+ return retval;
+
+ ACE_NEW_RETURN (this->server_impl_, Nestea_i (this->use_ir_), -1);
+
+ CORBA::String_var server_str =
+ this->orb_manager_.activate_under_child_poa ("server",
+ this->server_impl_,
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ if (this->use_ir_ == 1)
+ {
+ ACE_NEW_RETURN (this->ir_helper_, IR_Helper (poa_name,
+ this->orb_manager_.child_poa (),
+ this->orb_manager_.orb (),
+ TAO_debug_level),
+ -1);
+
+ if (this->register_with_ir_ == 1)
+ this->ir_helper_->register_server ("nestea_server -i");
+ }
+
+ PortableServer::ObjectId_var id =
+ PortableServer::string_to_ObjectId ("server");
+
+ CORBA::Object_var server_obj =
+ this->orb_manager_.child_poa ()->id_to_reference (id.in (),
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ if (this->use_ir_ == 1)
+ {
+ this->ir_helper_->change_object (server_obj, TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+ }
+
+ server_str =
+ this->orb_manager_.orb ()->object_to_string (server_obj.in (),
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG, "The IOR is: <%s>\n", server_str.in ()));
+
+ if (this->ior_output_file_)
+ {
+ ACE_OS::fprintf (this->ior_output_file_, "%s", server_str.in ());
+ ACE_OS::fclose (this->ior_output_file_);
+ }
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("Nestea_i::init");
+ TAO_RETHROW_RETURN (-1);
+ }
+ TAO_ENDTRY;
+
+ return 0;
+}
+
+int
+Nestea_Server_i::run (CORBA::Environment& env)
+{
+ TAO_TRY
+ {
+ if (this->use_ir_ == 1)
+ {
+ this->ir_helper_->notify_startup (TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+ }
+
+ this->orb_manager_.run (TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ if (this->use_ir_ == 1)
+ {
+ this->ir_helper_->notify_shutdown (TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+ }
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("Nestea_Server_i::run");
+ return -1;
+ }
+ TAO_ENDTRY;
+
+ return 0;
+}
+
+Nestea_Server_i::~Nestea_Server_i (void)
+{
+ delete this->ir_helper_;
+ delete this->server_impl_;
+}