00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <unistd.h>
00021 #include <string.h>
00022 #include <stdlib.h>
00023 #include <iostream>
00024
00025 #include <archon/util/logger.H>
00026 #include <archon/util/text.H>
00027
00028 #include <archon/x3d/sai/orb.H>
00029
00030 namespace Archon
00031 {
00032 namespace X3D
00033 {
00034 namespace SAI
00035 {
00036 using namespace Utilities;
00037
00038 Orb::Orb(int port)
00039 {
00040 char hostname[256];
00041 if(gethostname(hostname, sizeof(hostname))<0)
00042 {
00043 Logger::get()->log((string)strerror(errno) + "\n");
00044 abort();
00045 };
00046
00047 hostname[sizeof(hostname)-1] = '\0';
00048
00049 char endpoint[512];
00050 if(port<0) snprintf(endpoint, sizeof(endpoint), "giop:tcp:%s:", hostname);
00051 else snprintf(endpoint, sizeof(endpoint), "giop:tcp:%s:%d", hostname, port);
00052
00053 const char *args[][2] =
00054 {
00055 { "endPoint" , endpoint },
00056
00057
00058
00059
00060 { 0 , 0 }
00061 };
00062
00063
00064 int argc = 0;
00065 orb = CORBA::ORB_init(argc, 0, "omniORB4", args);
00066
00067
00068 CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
00069 poa = PortableServer::POA::_narrow(obj);
00070
00071 PortableServer::POA_var rootPoa = PortableServer::POA::_narrow(obj);
00072
00073 CORBA::PolicyList policies(1);
00074 policies.length(1);
00075 policies[0] = new BiDirPolicy::BidirectionalPolicy(BiDirPolicy::BOTH);
00076 poa = rootPoa->create_POA("archon", PortableServer::POAManager::_nil(), policies);
00077
00078
00079
00080 PortableServer::POAManager_var pman = poa->the_POAManager();
00081 pman->activate();
00082 }
00083
00084 Orb::~Orb()
00085 {{
00086 orb->destroy();
00087 }}
00088 }
00089 }
00090 }
00091