Salome HOME
PR : merge branch V1_2c dans branche principale pour V1_3_0_b1
[modules/kernel.git] / src / Session / SALOME_Session_Server.cxx
index a53193848d0b6819bb914a69d7a34ffc3debb0ca..99482aa3622354689f4948394e2b51c7afd4d06f 100644 (file)
@@ -28,7 +28,7 @@
 
 # include "Utils_ORB_INIT.hxx"
 # include "Utils_SINGLETON.hxx"
-
+# include "SALOME_NamingService.hxx"
 #include <iostream>
 #include <unistd.h>
 using namespace std;
@@ -61,9 +61,76 @@ int main(int argc, char **argv)
     ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting()) ;
     CORBA::ORB_var &orb = init( argc , argv ) ;
 
-    CORBA::Object_var obj =orb->resolve_initial_references("RootPOA") ;
-    PortableServer::POA_var poa = PortableServer::POA::_narrow(obj) ;
-
+    //
+    long TIMESleep = 250000000;
+       int NumberOfTries = 40;
+       int a;
+       timespec ts_req;
+       ts_req.tv_nsec=TIMESleep;
+       ts_req.tv_sec=0;
+       timespec ts_rem;
+       ts_rem.tv_nsec=0;
+       ts_rem.tv_sec=0;
+       CosNaming::NamingContext_var inc;
+       PortableServer::POA_var poa;
+       CORBA::Object_var theObj;
+       CORBA::Object_var obj;
+       CORBA::Object_var object;
+       SALOME_Logger::Logger_var log;
+       SALOME_NamingService &naming = *SINGLETON_<SALOME_NamingService>::Instance() ;
+       int SESSION=0;
+       const char * Env = getenv("USE_LOGGER"); 
+        int EnvL =0;
+       if ((Env!=NULL) && (strlen(Env)))
+         EnvL=1;
+       CosNaming::Name name;
+       name.length(1);
+       name[0].id=CORBA::string_dup("Logger");    
+       PortableServer::POAManager_var pman; 
+       for (int i = 1; i<=NumberOfTries; i++){
+         if (i!=1) 
+           a=nanosleep(&ts_req,&ts_rem);
+         try{ 
+           obj = orb->resolve_initial_references("RootPOA");
+            if(!CORBA::is_nil(obj))
+           poa = PortableServer::POA::_narrow(obj);
+            if(!CORBA::is_nil(poa))
+           pman = poa->the_POAManager();
+             if(!CORBA::is_nil(orb)) 
+           theObj = orb->resolve_initial_references("NameService");
+           if (!CORBA::is_nil(theObj))
+             inc = CosNaming::NamingContext::_narrow(theObj);
+           }
+         catch( CORBA::COMM_FAILURE& )
+           {
+             MESSAGE( "Session Server: CORBA::COMM_FAILURE: Unable to contact the Naming Service" )
+               }
+         if(!CORBA::is_nil(inc)) {
+           MESSAGE( "Session Server: Naming Service was found" )
+             if(EnvL==1){
+               for(int j=1; j<=NumberOfTries; j++){
+                 if (j!=1) 
+                   a=nanosleep(&ts_req, &ts_rem);
+                 try{
+                   object = inc->resolve(name);
+                 }
+                 catch(CosNaming::NamingContext::NotFound){ MESSAGE( "Session Server: Logger Server wasn't found" ) }
+                 catch(...){ MESSAGE( "Session Server: Unknown exception" ) }
+                 if (!CORBA::is_nil(object))
+                   log = SALOME_Logger::Logger::_narrow(object);
+                 if (!CORBA::is_nil(log)){
+                   MESSAGE( "Session Server: Loger Server was found" )
+                     log->ping();
+                    SESSION=1;
+                   break;
+                 }
+               }}
+         }
+         if ((SESSION==1)||((EnvL==0)&&(!CORBA::is_nil(inc))))
+            break;
+             }
+    //
+   
     // servant
     SALOME_Session_i * mySALOME_Session = new SALOME_Session_i(argc, argv, orb, poa) ;
     PortableServer::ObjectId_var mySALOME_Sessionid = poa->activate_object(mySALOME_Session) ;
@@ -76,7 +143,7 @@ int main(int argc, char **argv)
 
     mySALOME_Session->_remove_ref() ;
 
-    PortableServer::POAManager_var pman = poa->the_POAManager() ;
+    //DECOMMENT PortableServer::POAManager_var pman = poa->the_POAManager() ;
     pman->activate() ;
     MESSAGE("pman->activate()")