Salome HOME
updated copyright message
[modules/kernel.git] / src / SALOMETraceCollector / TraceCollector_WaitForServerReadiness.cxx
index b7c0770df8030bfa1393c6298ee3b85510ceb0c4..b729334e9b9f84a69a0c50a9b2ba1456b43c7ab1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //  $Header$
 //
 #include "TraceCollector_WaitForServerReadiness.hxx"
+#include "KernelBasis.hxx"
+#include "SALOME_Fake_NamingService.hxx"
+#include "OpUtil.hxx"
 #include <iostream>
 #include <ctime>
+#include <memory>
 
-#ifdef WIN32
+
+#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER < 1900
 #include <omnithread/pthread_nt.h>
 #endif
 
@@ -46,8 +51,7 @@
  */
 // ============================================================================
 
-CORBA::Object_ptr TraceCollector_WaitForServerReadiness(CORBA::ORB_ptr orb,
-                                                        std::string serverName)
+CORBA::Object_ptr TraceCollector_WaitForServerReadiness(const std::string& serverName)
 {
   long TIMESleep = 500000000;
   int NumberOfTries = 40;
@@ -59,6 +63,7 @@ CORBA::Object_ptr TraceCollector_WaitForServerReadiness(CORBA::ORB_ptr orb,
   ts_rem.tv_nsec=0;
   ts_rem.tv_sec=0;
 
+  CORBA::ORB_var orb = KERNEL::GetRefToORB();
   CORBA::Object_var obj;
 
   try
@@ -66,60 +71,78 @@ CORBA::Object_ptr TraceCollector_WaitForServerReadiness(CORBA::ORB_ptr orb,
       // NB. You can't use SALOME_NamingService class because
       // it uses MESSAGE macro
       // Otherwise, you will get segmentation fault.   
-
-      CosNaming::NamingContext_var inc;
-      CosNaming::Name name;
-      name.length(1);
-      name[0].id = CORBA::string_dup(serverName.c_str());
-      CORBA::Object_var theObj=CORBA::Object::_nil();
-
-      for (int itry=0; itry < NumberOfTries; itry++)
+      if(getSSLMode())
+      {
+        std::string regName(std::string("/")+serverName);
+        std::unique_ptr<SALOME_Fake_NamingService> ns(new SALOME_Fake_NamingService);
+        for (int itry=0; itry < NumberOfTries; itry++)
         {
-          try
-            { 
-              if(!CORBA::is_nil(orb)) 
-                theObj = orb->resolve_initial_references("NameService");
-              if (!CORBA::is_nil(theObj))
-                inc = CosNaming::NamingContext::_narrow(theObj);
-            }  
-          catch( CORBA::SystemException& )
-            {
-              std::cout << "TraceCollector_WaitForServerReadiness: "
-                   << "CORBA::SystemException: "
-                   << "Unable to contact the Naming Service" << std::endl;
-            }
-          catch(...)
-            {
-              std::cout << "TraceCollector_WaitForServerReadiness: "
-                   << "Unknown exception dealing with Naming Service" << std::endl;
-            }
-          
-          obj=CORBA::Object::_nil();
-          if(!CORBA::is_nil(inc))
-            {
-              try
-                {
-                  obj = inc->resolve(name);
-                  if (!CORBA::is_nil(obj))
-                    {
-                      //cout << "TraceCollector_WaitForServerReadiness: "
-                      //           << serverName << " found in CORBA Name Service" << endl;
-                      break;
-                    }
-                }
-              catch (const CosNaming::NamingContext::NotFound&)
-                {
-                  std::cout << "Caught exception: Naming Service can't found Logger";
-                }
-            }
-#ifndef WIN32
-          nanosleep(&ts_req,&ts_rem);
-#else
-          Sleep(TIMESleep / 1000000);
-#endif
-                 std::cout << "TraceCollector_WaitForServerReadiness: retry look for"
-               << serverName << std::endl;
-        }          
+          obj = ns->Resolve(regName.c_str());
+          if(!CORBA::is_nil(obj))
+            break;
+  #ifndef WIN32
+            nanosleep(&ts_req,&ts_rem);
+  #else
+            Sleep(TIMESleep / 1000000);
+  #endif
+        }
+      }
+      else
+      {
+        CosNaming::NamingContext_var inc;
+        CosNaming::Name name;
+        name.length(1);
+        name[0].id = CORBA::string_dup(serverName.c_str());
+        CORBA::Object_var theObj=CORBA::Object::_nil();
+
+        for (int itry=0; itry < NumberOfTries; itry++)
+          {
+            try
+              { 
+                if(!CORBA::is_nil(orb)) 
+                  theObj = orb->resolve_initial_references("NameService");
+                if (!CORBA::is_nil(theObj))
+                  inc = CosNaming::NamingContext::_narrow(theObj);
+              }  
+            catch( CORBA::SystemException& )
+              {
+                std::cout << "TraceCollector_WaitForServerReadiness: "
+                    << "CORBA::SystemException: "
+                    << "Unable to contact the Naming Service" << std::endl;
+              }
+            catch(...)
+              {
+                std::cout << "TraceCollector_WaitForServerReadiness: "
+                    << "Unknown exception dealing with Naming Service" << std::endl;
+              }
+            
+            obj=CORBA::Object::_nil();
+            if(!CORBA::is_nil(inc))
+              {
+                try
+                  {
+                    obj = inc->resolve(name);
+                    if (!CORBA::is_nil(obj))
+                      {
+                        //cout << "TraceCollector_WaitForServerReadiness: "
+                        //           << serverName << " found in CORBA Name Service" << endl;
+                        break;
+                      }
+                  }
+                catch (const CosNaming::NamingContext::NotFound&)
+                  {
+                    std::cout << "Caught exception: Naming Service can't found Logger";
+                  }
+              }
+  #ifndef WIN32
+            nanosleep(&ts_req,&ts_rem);
+  #else
+            Sleep(TIMESleep / 1000000);
+  #endif
+        std::cout << "TraceCollector_WaitForServerReadiness: retry look for"
+                << serverName << std::endl;
+          }
+      }       
     }
   catch (const CosNaming::NamingContext::NotFound&)
     {