diff options
Diffstat (limited to 'TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/LB_server.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/LB_server.cpp | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/LB_server.cpp b/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/LB_server.cpp new file mode 100644 index 00000000000..3c25251db36 --- /dev/null +++ b/TAO/orbsvcs/tests/LoadBalancing/GenericFactory/Application_Controlled/LB_server.cpp @@ -0,0 +1,185 @@ +#include "LB_server.h" +#include "Basic.h" + +#include "TestC.h" +#include "ace/OS_NS_stdio.h" + +ACE_RCSID (Application_Controlled, + LB_server, + "$Id$") + +LB_server::LB_server (int argc, char **argv) + : argc_ (argc) + , argv_ (argv) +{ +} + +int +LB_server::destroy (void) +{ + try + { + this->lm_->delete_object (this->fcid_.in ()); + + this->root_poa_->destroy (1, 1); + + this->orb_->destroy (); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ( + "Exception caught while destroying LB_server\n"); + return -1; + } + return 1; + +} + +CORBA::ORB_ptr +LB_server::orb (void) +{ + return this->orb_.in (); +} + +CORBA::Object_ptr +LB_server::object_group (void) +{ + return this->object_group_.in (); +} + +CosLoadBalancing::LoadManager_ptr +LB_server::load_manager (void) +{ + return this->lm_.in (); +} + +int +LB_server::write_ior_to_file (const char *ior) +{ + FILE *output_file = + ACE_OS::fopen ("obj.ior", "w"); + + if (output_file == 0) + { + ACE_ERROR ((LM_ERROR, + "Cannot open output file for writing IOR:")); + return -1; + } + + ACE_OS::fprintf (output_file, "%s", ior); + ACE_OS::fclose (output_file); + return 0; +} + +int +LB_server::start_orb_and_poa (void) +{ + try + { + // Initialise the ORB. + this->orb_ = CORBA::ORB_init (this->argc_, + this->argv_, + ""); + + CORBA::Object_var poa_object = + this->orb_->resolve_initial_references("RootPOA"); + + if (CORBA::is_nil (poa_object.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + " (%P|%t) Unable to initialize the POA.\n"), + 1); + + this->root_poa_ = PortableServer::POA::_narrow (poa_object.in ()); + + PortableServer::POAManager_var poa_manager = + this->root_poa_->the_POAManager (); + + poa_manager->activate (); + + CORBA::Object_var obj = + this->orb_->resolve_initial_references ("LoadManager"); + + this->lm_ = + CosLoadBalancing::LoadManager::_narrow (obj.in ()); + + if (CORBA::is_nil (this->lm_.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + " (%P|%t) Unable to get Load Manager Reference\n"), + 1); + + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Exception raised initialising ORB or POA"); + return -1; + } + + return 1; + +} + +int +LB_server::create_object_group (void) +{ + try + { + const char *repository_id = "IDL:Test/Basic:1.0"; + + PortableGroup::Criteria criteria (1); + criteria.length (1); + + PortableGroup::Property &property = criteria[0]; + property.nam.length (1); + + property.nam[0].id = + CORBA::string_dup ("org.omg.PortableGroup.MembershipStyle"); + + PortableGroup::MembershipStyleValue msv = + PortableGroup::MEMB_APP_CTRL; + property.val <<= msv; + + this->object_group_ = this->lm_->create_object (repository_id, + criteria, + this->fcid_.out ()); + + CORBA::String_var ior = + this->orb_->object_to_string (this->object_group_.in ()); + + this->write_ior_to_file (ior.in ()); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ( + "Exception raised while creating object group"); + return -1; + } + + return 1; + +} + +int +LB_server::register_servant (Basic *servant, const char *loc) +{ + try + { + Test::Basic_var basic = + servant->_this (); + + PortableGroup::Location location (1); + location.length (1); + + location[0].id = CORBA::string_dup (loc); + + this->lm_->add_member (this->object_group_.in (), + location, + basic.in ()); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Exception raised while registering servant"); + return -1; + } + + return 1; +} |