Salome HOME
Merge from V5_1_main branch 24/11/2010
[modules/geom.git] / src / GEOMClient / GEOM_Client.cxx
index 88bd374a388e315c0fd259ac0399158eb9e1e5a3..0e07e69d3bbd9a8ae93aeff9206695e316728869 100644 (file)
@@ -1,4 +1,4 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -19,6 +19,7 @@
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
 //  GEOM GEOMClient : tool to transfer BREP files from GEOM server to GEOM client
 //  File   : GEOM_Client.cxx
 //  Author : Yves FRICAUD/Lucien PIGNOLONI
@@ -29,7 +30,7 @@
 
 #include <Standard_Stream.hxx>
 
-#include <strstream>
+#include <sstream>
 
 #include "GEOM_Client.hxx"
 #include <SALOMEconfig.h>
 #define HST_CLIENT_LEN 256
 
 
-
 //=======================================================================
 // function : Load()
-// purpose  : 
+// purpose  :
 //=======================================================================
 TopoDS_Shape GEOM_Client::Load( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape )
 {
-    std::string hst_client = Kernel_Utils::GetHostname();
-
-    Engines::Container_var ctn_server = geom->GetContainerRef();
-    long                   pid_server = ctn_server->getPID();
-   if ( (pid_client==pid_server) && (strcmp(hst_client.c_str(), ctn_server->getHostName())==0) ) {
-        TopoDS_Shape* S = (TopoDS_Shape*)(aShape->getShape());
-        return(*S);
-    } else {
-        /* get sequence of bytes of resulting brep shape from GEOM server */
-        TopoDS_Shape S;
-        SALOMEDS::TMPFile_var SeqFile = aShape->GetShapeStream();
-        int sizebuf = SeqFile->length();
-        char* buf;
-        buf = (char*) &SeqFile[0];
-        std::istrstream streamBrep(buf,sizebuf);
-        BRep_Builder aBuilder;
-        BRepTools::Read(S, streamBrep, aBuilder);
-        return(S);
-    };
+  std::string hst_client = Kernel_Utils::GetHostname();
+
+  Engines::Container_var ctn_server = geom->GetContainerRef();
+  long                   pid_server = ctn_server->getPID();
+
+  CORBA::String_var hostname = ctn_server->getHostName();
+  if ( pid_client == pid_server && !strcmp(hst_client.c_str(), hostname.in()) ) {
+    TopoDS_Shape* S = (TopoDS_Shape*)(aShape->getShape());
+    return(*S);
+  } else {
+    /* get sequence of bytes of resulting brep shape from GEOM server */
+    TopoDS_Shape S;
+    SALOMEDS::TMPFile_var SeqFile = aShape->GetShapeStream();
+    int sizebuf = SeqFile->length();
+    char* buf;
+    buf = (char*) &SeqFile[0];
+    std::istringstream streamBrep(buf);
+    BRep_Builder aBuilder;
+    BRepTools::Read(S, streamBrep, aBuilder);
+    return(S);
+  }
 }
 
-
 //=======================================================================
 // function : Create()
 // purpose  : Create in client not in a container
 //=======================================================================
 GEOM_Client::GEOM_Client()
 {
-  pid_client = 
+  pid_client =
 #ifdef WNT
     (long)_getpid();
 #else
@@ -104,7 +104,7 @@ GEOM_Client::GEOM_Client()
 
 //=======================================================================
 // function : Create()
-// purpose  : 
+// purpose  :
 //=======================================================================
 GEOM_Client::GEOM_Client(Engines::Container_ptr client)
 {
@@ -113,7 +113,7 @@ GEOM_Client::GEOM_Client(Engines::Container_ptr client)
 
 //=======================================================================
 // function : Find()
-// purpose  : 
+// purpose  :
 //=======================================================================
 Standard_Integer GEOM_Client::Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S )
 {
@@ -128,7 +128,7 @@ Standard_Integer GEOM_Client::Find( const TCollection_AsciiString& IOR, TopoDS_S
 
 //=======================================================================
 // function : Find()
-// purpose  : 
+// purpose  :
 //=======================================================================
 Standard_Integer GEOM_Client::Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR )
 {
@@ -158,18 +158,17 @@ void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape&
 void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
 {
   if( myIORs.IsEmpty() )
-    return ;
-  
-  TopoDS_Shape S ;
-  Standard_Integer anIndex = Find( IOR, S ) ;
+    return;
+
+  TopoDS_Shape S;
+  Standard_Integer anIndex = Find( IOR, S );
   if( anIndex != 0 ) {
-    myIORs.Remove(anIndex) ;
-    myShapes.Remove(anIndex) ;
+    myIORs.Remove(anIndex);
+    myShapes.Remove(anIndex);
   }
-  return ;
+  return;
 }
 
-
 //=======================================================================
 // function : ClearClientBuffer()
 // purpose  : purge buffer
@@ -177,10 +176,10 @@ void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
 void GEOM_Client::ClearClientBuffer()
 {
   if( myIORs.IsEmpty() )
-    return ;
-  myIORs.Clear() ;
-  myShapes.Clear() ;
-  return ;
+    return;
+  myIORs.Clear();
+  myShapes.Clear();
+  return;
 }
 
 //=======================================================================
@@ -189,18 +188,18 @@ void GEOM_Client::ClearClientBuffer()
 //=======================================================================
 unsigned int GEOM_Client::BufferLength()
 {
-  return myIORs.Length() ;
+  return myIORs.Length();
 }
 
-
 //=======================================================================
 // function : GetShape()
-// purpose  : 
+// purpose  :
 //=======================================================================
 TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr aShape )
 {
   TopoDS_Shape S;
-  TCollection_AsciiString IOR = geom->GetStringFromIOR(aShape);
+  CORBA::String_var anIOR = geom->GetStringFromIOR(aShape);
+  TCollection_AsciiString IOR = (char*)anIOR.in();
   Standard_Integer anIndex = Find(IOR, S);
 
   if (anIndex != 0) return S;