summaryrefslogtreecommitdiff
path: root/TAO/performance-tests/CSD_Strategy/TestApps/ClientApp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/performance-tests/CSD_Strategy/TestApps/ClientApp.cpp')
-rw-r--r--TAO/performance-tests/CSD_Strategy/TestApps/ClientApp.cpp200
1 files changed, 200 insertions, 0 deletions
diff --git a/TAO/performance-tests/CSD_Strategy/TestApps/ClientApp.cpp b/TAO/performance-tests/CSD_Strategy/TestApps/ClientApp.cpp
new file mode 100644
index 00000000000..f01b5c7570d
--- /dev/null
+++ b/TAO/performance-tests/CSD_Strategy/TestApps/ClientApp.cpp
@@ -0,0 +1,200 @@
+// $Id$
+#include "ClientApp.h"
+#include "TestInf/AppHelper.h"
+#include "TestInf/TestAppExceptionC.h"
+#include "TestServant/Foo_ClientEngine.h"
+#include "ace/Get_Opt.h"
+
+
+ClientApp::ClientApp()
+ : TestAppBase("CSD_PT_ClientApp"),
+ ior_("Not Set"),
+ client_id_(0),
+ num_loops_(1)
+{
+}
+
+
+ClientApp::~ClientApp()
+{
+}
+
+
+int
+ClientApp::run_i(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ int result = this->init(argc, argv ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ if (result != 0)
+ {
+ return result;
+ }
+
+ this->client_setup(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ result = this->run_engine(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ this->cleanup();
+ return result;
+}
+
+
+int
+ClientApp::init(int argc, char* argv[] ACE_ENV_ARG_DECL)
+{
+ this->orb_ = CORBA::ORB_init(argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // Parse the command-line args for this application.
+ // * Returns -1 if problems are encountered.
+ // * Returns 1 if the usage statement was explicitly requested.
+ // * Returns 0 otherwise.
+ return this->parse_args(argc, argv);
+}
+
+
+void
+ClientApp::client_setup(ACE_ENV_SINGLE_ARG_DECL)
+{
+ // Turn the ior_ into a Foo obj ref.
+ Foo_var foo = RefHelper<Foo>::string_to_ref(this->orb_.in(),
+ this->ior_.c_str()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Create the ClientEngine object, and give it the Foo obj ref.
+ this->engine_ = new Foo_ClientEngine(foo.in(), this->client_id_);
+}
+
+
+int
+ClientApp::run_engine(ACE_ENV_SINGLE_ARG_DECL)
+{
+ bool result = this->engine_->execute(this->num_loops_
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+ return result ? 0 : -1;
+}
+
+
+void
+ClientApp::cleanup()
+{
+}
+
+
+int
+ClientApp::parse_args(int argc, char* argv[])
+{
+ this->exe_name_ = argv[0];
+
+ ACE_Get_Opt get_opts(argc, argv, "i:n:l:");
+
+ int c;
+
+ while ((c = get_opts()) != -1)
+ {
+ int result = 0;
+ switch (c)
+ {
+ case 'i':
+ this->ior_ = get_opts.opt_arg();
+ break;
+
+ case 'n':
+ result = this->set_arg(this->client_id_,
+ get_opts.opt_arg(),
+ c,
+ "client_id",
+ 1);
+ break;
+
+ case 'l':
+ result = this->set_arg(this->num_loops_,
+ get_opts.opt_arg(),
+ c,
+ "num_loops",
+ 1);
+ break;
+
+ case '?':
+ this->usage_statement();
+ return 1;
+
+ default:
+ this->usage_statement();
+ return -1;
+ }
+
+ if (result != 0)
+ {
+ return result;
+ }
+ }
+
+ return this->arg_dependency_checks();
+}
+
+void
+ClientApp::usage_statement()
+{
+ ACE_ERROR((LM_ERROR,
+ "Usage: %s [options]\n\n"
+ "OPTIONS:\n\n"
+ "\t[-i <ior>]\n"
+ "\t[-n <client_id>]\n"
+ "\t[-l <num_loops>]\n"
+ "\t[-?]\n\n",
+ this->exe_name_.c_str()));
+}
+
+
+int
+ClientApp::arg_dependency_checks()
+{
+ if (this->ior_ == "Not Set")
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: Missing required command-line option (-i <ior>).\n"));
+ this->usage_statement();
+ return -1;
+ }
+
+ if (this->client_id_ <= 0)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: Required command-line option (-n <client id>).\n"
+ " The client id should be positive integer. \n"));
+ this->usage_statement();
+ return -1;
+ }
+
+ return 0;
+}
+
+
+int
+ClientApp::set_arg(unsigned& value,
+ const char* arg,
+ char opt,
+ const char* name,
+ int min)
+{
+ int tmp = ACE_OS::atoi(arg);
+
+ if (tmp < min)
+ {
+ ACE_ERROR((LM_ERROR,
+ "Error: -%c <%s> must be integer type with a value of, "
+ "at least, %d.\n", opt, name, min));
+ this->usage_statement();
+ return -1;
+ }
+
+ value = tmp;
+ return 0;
+}
+
+