summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2012-06-02 20:16:00 +0200
committerManuel Traut <manut@mecka.net>2012-06-02 20:16:00 +0200
commit6d77208d5ea6c18d28825c9dd4bf27565de0204f (patch)
tree73606a702d94ae2133b83f50a3e2e70e10e44873
parent46acbd16e242d2c62edfe01dffc88fddbdbc7f14 (diff)
manager: add corba initialization
- register manager object at namingservice Signed-off-by: Manuel Traut <manut@mecka.net>
-rw-r--r--manager/Makefile2
-rw-r--r--manager/distrio_manager.cpp55
2 files changed, 54 insertions, 3 deletions
diff --git a/manager/Makefile b/manager/Makefile
index 28f7421..41553c3 100644
--- a/manager/Makefile
+++ b/manager/Makefile
@@ -6,7 +6,7 @@ DISTRIO_COMMON := ../common
DISTRIO_IO := ../io
LDFLAGS += -L$(DISTRIO_COMMON) -ldistrio_common -L$(DISTRIO_IO) -ldistrio_io \
- -lACE -lTAO -lTAO_AnyTypeCode -lTAO_PortableServer
+ -lACE -lTAO -lTAO_AnyTypeCode -lTAO_CosNaming -lTAO_PortableServer
CFLAGS += -fPIC -I$(DISTRIO_COMMON) -I$(DISTRIO_IO)
CXXFLAGS += $(CFLAGS)
diff --git a/manager/distrio_manager.cpp b/manager/distrio_manager.cpp
index 8cd2f03..1e26ad7 100644
--- a/manager/distrio_manager.cpp
+++ b/manager/distrio_manager.cpp
@@ -30,6 +30,10 @@
#include "distrio_managerI.h"
+#include <orbsvcs/CosNamingC.h>
+
+#include <iostream>
+
// Implementation skeleton constructor
Distrio_Manager_i::Distrio_Manager_i (void)
{
@@ -100,7 +104,54 @@ void Distrio_Manager_i::log_error (
// Add your implementation here
}
-int main (int argc, char **argv)
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
- return 0;
+ std::cout << __FILE__ << " build " << __DATE__ << " " << __TIME__ <<std::endl;
+
+ int ret = 0;
+ CORBA::ORB_var orb;
+ CORBA::Object_var distrio_manager_obj, tmp;
+ PortableServer::POA_var poa;
+ PortableServer::POAManager_var poa_mgr;
+ CosNaming::NamingContext_var nc;
+ CosNaming::Name name;
+
+ Distrio_Manager_i *distrio_manager;
+ PortableServer::ObjectId_var distrio_manager_oid;
+
+ distrio_manager = new Distrio_Manager_i ();
+
+ try {
+ orb = CORBA::ORB_init (argc, argv);
+ tmp = orb->resolve_initial_references ("RootPOA");
+ poa = PortableServer::POA::_narrow (tmp.in ());
+ distrio_manager_oid = poa->activate_object (distrio_manager);
+ distrio_manager_obj = distrio_manager->_this ();
+
+ CORBA::String_var ior (orb->object_to_string (distrio_manager_obj.in ()));
+ tmp = orb->resolve_initial_references ("NameService");
+ name.length (2);
+ name[0].id = CORBA::string_dup ("distrio");
+ name[1].id = CORBA::string_dup ("manager");
+ nc = CosNaming::NamingContext::_narrow (tmp.in ());
+ nc->rebind (name, distrio_manager_obj.in ());
+
+ poa_mgr = poa->the_POAManager ();
+ poa_mgr->activate ();
+
+ orb->run ();
+ orb->destroy ();
+ } catch (CORBA::SystemException &e) {
+ std::cerr << "CORBA initialization failed: " << e << std::endl;
+ ret = -EINVAL;
+ goto out;
+ } catch(CORBA::Exception &e) {
+ std::cerr << "CORBA initialization failed: " << e << std::endl;
+ ret = -EINVAL;
+ goto out;
+ }
+
+out:
+ free (distrio_manager);
+ return ret;
}