diff options
Diffstat (limited to 'TAO/orbsvcs/tests/FT_App/FT_ReplicationManagerController.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/FT_App/FT_ReplicationManagerController.cpp | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/FT_App/FT_ReplicationManagerController.cpp b/TAO/orbsvcs/tests/FT_App/FT_ReplicationManagerController.cpp new file mode 100644 index 00000000000..16f1f70eee4 --- /dev/null +++ b/TAO/orbsvcs/tests/FT_App/FT_ReplicationManagerController.cpp @@ -0,0 +1,200 @@ +// $Id$ + +#include "orbsvcs/FT_ReplicationManagerC.h" +#include <ace/Get_Opt.h> +// FUZZ: disable check_for_streams_include +#include "ace/streams.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_stdio.h" + +// A simple class for building a client that "controls' the +// Replication Manager (right now it just shuts it down). +class TAO_FT_ReplicationManagerController +{ +///////////////////////////// +// Public interface. +public: + TAO_FT_ReplicationManagerController (); + virtual ~TAO_FT_ReplicationManagerController (); + + int init (int & argc, char * argv[]); + int parse_args (int & argc, char* argv[]); + int run (); + +///////////////////////////// +// Forbidden. +private: + TAO_FT_ReplicationManagerController ( + const TAO_FT_ReplicationManagerController & rhs); + TAO_FT_ReplicationManagerController & operator = ( + const TAO_FT_ReplicationManagerController & rhs); + +///////////////////////////// +// Private implementation. +private: + void usage (FILE* out) const; + +///////////////////////////// +// Data members. +private: + CORBA::ORB_var orb_; + FT::ReplicationManager_var replication_manager_; + const char * rm_ior_; + int shutdown_; + +}; + +TAO_FT_ReplicationManagerController::TAO_FT_ReplicationManagerController () + : orb_ (CORBA::ORB::_nil()) + , replication_manager_ (FT::ReplicationManager::_nil()) + , rm_ior_ (0) + , shutdown_ (0) +{ +} + +TAO_FT_ReplicationManagerController::~TAO_FT_ReplicationManagerController () +{ +} + +int TAO_FT_ReplicationManagerController::init (int & argc, char * argv[]) +{ + int result = 0; + + ACE_TRY_NEW_ENV + { + // Initialize the ORB. + this->orb_ = CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + // Parse arguments. + result = this->parse_args (argc, argv); + if (result == 0) + { + CORBA::Object_var obj = CORBA::Object::_nil (); + if (this->rm_ior_ != 0) + { + obj = this->orb_->string_to_object ( + this->rm_ior_ ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + else + { + obj = this->orb_->resolve_initial_references ( + "ReplicationManager" ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + this->replication_manager_ = FT::ReplicationManager::_narrow ( + obj.in() ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + if (CORBA::is_nil (this->replication_manager_.in())) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ( + "TAO_FT_ReplicationManagerController::init: " + "Could not get Replication Manager's IOR.\n") + )); + result = -1; + } + } + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION ( + ACE_ANY_EXCEPTION, + ACE_TEXT ( + "TAO_FT_ReplicationManagerController::init: \n") + ); + result = -1; + } + ACE_ENDTRY; + + return result; +} + + +int TAO_FT_ReplicationManagerController::parse_args (int & argc, char * argv[]) +{ + int result = 0; + + ACE_Get_Opt get_opts (argc, argv, "k:x"); + int c; + + while (result == 0 && (c = get_opts ()) != -1) + { + switch (c) + { + case 'k': + { + this->rm_ior_ = get_opts.opt_arg (); + break; + } + + case 'x': + { + this->shutdown_ = 1; + break; + } + + default: + ACE_OS::fprintf (stderr, "%s: Unknown argument - %c\n", + argv[0], c); + this->usage(stderr); + result = -1; + break; + + case '?': + this->usage(stderr); + result = -1; + } + } + + return result; +} + +void TAO_FT_ReplicationManagerController::usage (FILE* out) const +{ + ACE_OS::fprintf (out, "usage" + " -k <replication manager ior file>" + " -x (shutdown the Replication Manager)\n"); +} + +int TAO_FT_ReplicationManagerController::run () +{ + int result = 0; + + ACE_TRY_NEW_ENV + { + if (this->shutdown_ == 1) + { + this->replication_manager_->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + ACE_Time_Value tv (0, 500000); + ACE_OS::sleep (tv); + } + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION ( + ACE_ANY_EXCEPTION, + ACE_TEXT ( + "TAO_FT_ReplicationManagerController::run: \n") + ); + result = -1; + } + ACE_ENDTRY; + + return result; +} + +int main (int argc, char * argv[]) +{ + int result = 0; + TAO_FT_ReplicationManagerController rmctrl; + result = rmctrl.init (argc, argv); + if (result == 0) + { + result = rmctrl.run (); + } + return result; +} + |