diff options
Diffstat (limited to 'TAO/orbsvcs/tests/ImplRepo/Bug_2604_Regression/MessengerServer.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/ImplRepo/Bug_2604_Regression/MessengerServer.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/ImplRepo/Bug_2604_Regression/MessengerServer.cpp b/TAO/orbsvcs/tests/ImplRepo/Bug_2604_Regression/MessengerServer.cpp new file mode 100644 index 00000000000..41195ba4376 --- /dev/null +++ b/TAO/orbsvcs/tests/ImplRepo/Bug_2604_Regression/MessengerServer.cpp @@ -0,0 +1,93 @@ +// $Id$ +#include "Messenger_i.h" + +#include "tao/ImR_Client/ImR_Client.h" + +#include "ace/SString.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_NS_stdio.h" + +PortableServer::POA_ptr +createPersistentPOA (PortableServer::POA_ptr root_poa, const char *poa_name) +{ + CORBA::PolicyList policies; + policies.length (2); + + policies[0] = root_poa->create_lifespan_policy (PortableServer::PERSISTENT); + policies[1] = + root_poa->create_id_assignment_policy (PortableServer::USER_ID); + + PortableServer::POAManager_var mgr = root_poa->the_POAManager (); + + PortableServer::POA_var poa = root_poa->create_POA (poa_name, mgr.in (), + policies); + policies[0]->destroy (); + policies[1]->destroy (); + + return poa._retn (); +} + +void +writeIORFile (const char* ior) +{ + FILE *out = ACE_OS::fopen ("messenger.ior", "w"); + if (out) + { + ACE_OS::fprintf (out, "%s", ior); + ACE_OS::fclose (out); + } +} + +int +main (int argc, char *argv[]) +{ + try + { + CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) Server Process started\n"))); + + CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA"); + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (obj.in ()); + + PortableServer::POAManager_var mgr = root_poa->the_POAManager (); + + const char* poa_name = "MessengerService"; + + PortableServer::POA_var poa = createPersistentPOA (root_poa.in (), + poa_name); + Messenger_i servant (orb.in ()); + + PortableServer::ObjectId_var object_id = + PortableServer::string_to_ObjectId ("object"); + + poa->activate_object_with_id (object_id.in (), &servant); + obj = poa->id_to_reference (object_id.in ()); + CORBA::String_var ior = orb->object_to_string (obj.in ()); + + writeIORFile (ior.in ()); + + mgr->activate (); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) Messenger server ready.\n"))); + + orb->run (); + + // the following 1 second of sleep is needed to help + // Windows with "server shutdown too quickly so the + // client cannot get the reply" issue. + ACE_OS::sleep(1); + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) Messenger server shutting " + "down.\n"))); + root_poa->destroy (1, 1); + orb->destroy (); + return 0; + } + catch (CORBA::Exception &ex) + { + ACE_CString str = ex._info (); + ACE_ERROR ((LM_ERROR, ACE_TEXT ("Server main() caught: %s\n"), + ACE_TEXT_CHAR_TO_TCHAR (str.c_str ()))); + } + return -1; +} |