summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/BiDir_CORBALOC/TimeServer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/BiDir_CORBALOC/TimeServer.cpp')
-rw-r--r--TAO/orbsvcs/tests/BiDir_CORBALOC/TimeServer.cpp174
1 files changed, 174 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/BiDir_CORBALOC/TimeServer.cpp b/TAO/orbsvcs/tests/BiDir_CORBALOC/TimeServer.cpp
new file mode 100644
index 00000000000..23f3ff6baf8
--- /dev/null
+++ b/TAO/orbsvcs/tests/BiDir_CORBALOC/TimeServer.cpp
@@ -0,0 +1,174 @@
+//$Id$
+#include "TimeModuleS.h"
+#include "tao/BiDir_GIOP/BiDirGIOP.h"
+#include "tao/AnyTypeCode/Any.h"
+#include "tao/Utils/PolicyList_Destroyer.h"
+#include "orbsvcs/CosNamingC.h"
+#include "tao/AnyTypeCode/Any.h"
+
+class Time_impl :
+ public POA_TimeModule::Time
+{
+public:
+ virtual TimeModule::TimeOfDay
+ get_gmt (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ void Shutdown (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+};
+
+
+TimeModule::TimeOfDay Time_impl::get_gmt (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+
+ time_t time_now = time(0);
+ struct tm *time_p = gmtime(&time_now);
+
+ TimeModule::TimeOfDay tod;
+
+ tod.hour = time_p->tm_hour;
+ tod.minute = time_p->tm_min;
+ tod.second = time_p->tm_sec;
+
+ return tod;
+}
+
+void
+Time_impl::Shutdown (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ exit(0);
+}
+
+int
+main(int argc, char * argv[])
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+
+ ACE_TRY
+ {
+ // Initialize orb
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc,
+ argv,
+ ""
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Get reference to Root POA.
+ CORBA::Object_var obj =
+ orb->resolve_initial_references ("RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var rootpoa =
+ PortableServer::POA::_narrow (obj.in ());
+
+ // Activate POA manager
+ PortableServer::POAManager_var mgr =
+ rootpoa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ mgr->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var poa;
+
+ TAO::Utils::PolicyList_Destroyer PolicyList (3);
+ PolicyList.length (3);
+
+ PolicyList [0] =
+ rootpoa->create_lifespan_policy (PortableServer::PERSISTENT
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PolicyList [1] =
+ rootpoa->create_id_assignment_policy (PortableServer::USER_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Any CallbackPolicy;
+ CallbackPolicy <<= BiDirPolicy::BOTH;
+ const char* sServerPoaName = "TelemetryServer";
+
+ PolicyList [2] =
+ orb->create_policy (BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE,
+ CallbackPolicy
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ poa = rootpoa->create_POA (sServerPoaName,
+ mgr.in(),
+ PolicyList
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+
+ PortableServer::ObjectId_var ServerId =
+ PortableServer::string_to_ObjectId ("TimeServer");
+
+ // Create an object
+ Time_impl *time_servant = new Time_impl;
+ PortableServer::ServantBase_var self_manage (time_servant);
+
+ poa->activate_object_with_id (ServerId.in (),
+ time_servant
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Get a reference after activating the object
+ TimeModule::Time_var tm = time_servant->_this();
+
+ // Get reference to initial naming context
+ CORBA::Object_var name_obj =
+ orb->resolve_initial_references ("NameService"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CosNaming::NamingContext_var inc =
+ CosNaming::NamingContext::_narrow (name_obj.in ());
+
+ if (CORBA::is_nil (inc.in ()))
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%P|%t) Error fetching naming context \n"));
+ }
+
+ CosNaming::Name service_name;
+ service_name.length(1);
+ service_name[0].id =
+ CORBA::string_dup ("Time");
+
+ inc->rebind (service_name,
+ tm.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // Run the event loop for fun
+ ACE_Time_Value tv (3, 0);
+
+ // Accept requests
+ orb->run (&tv
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ rootpoa->destroy (0 , 0 ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Caught an exception\n");
+
+ return -1;
+ }
+ ACE_ENDTRY;
+ ACE_CHECK_RETURN (-1);
+
+ return 0;
+}