diff options
| author | Manuel Traut <manut@mecka.net> | 2012-06-02 20:16:00 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2012-06-02 20:16:00 +0200 |
| commit | 6d77208d5ea6c18d28825c9dd4bf27565de0204f (patch) | |
| tree | 73606a702d94ae2133b83f50a3e2e70e10e44873 | |
| parent | 46acbd16e242d2c62edfe01dffc88fddbdbc7f14 (diff) | |
manager: add corba initialization
- register manager object at namingservice
Signed-off-by: Manuel Traut <manut@mecka.net>
| -rw-r--r-- | manager/Makefile | 2 | ||||
| -rw-r--r-- | manager/distrio_manager.cpp | 55 |
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; } |
