X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FCommunication%2FReceivers.cxx;h=3d1aea2a32a95cda53dcef279c359d5419948c5f;hb=7a07650dd1f183f5af156c1235cc1d67061813ec;hp=a5d65ae15fc517aa11ba2db600981da5102fce93;hpb=89d8cdd476c5f4d65bc3fd1089f092af42e2841c;p=modules%2Fkernel.git diff --git a/src/Communication/Receivers.cxx b/src/Communication/Receivers.cxx index a5d65ae15..3d1aea2a3 100644 --- a/src/Communication/Receivers.cxx +++ b/src/Communication/Receivers.cxx @@ -1,46 +1,65 @@ -#include "poa.h" +// Copyright (C) 2007-2013 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 +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "omniORB4/poa.h" #include "utilities.h" -using namespace std; #define TAILLE_SPLIT 100000 #define TIMEOUT 20 -template -CorbaNCNoCopyReceiver::CorbaNCNoCopyReceiver(CorbaSender mySender):_mySender(mySender){ +template +CorbaNCNoCopyReceiver::CorbaNCNoCopyReceiver(CorbaSender mySender):_mySender(mySender){ } -template -CorbaNCNoCopyReceiver::~CorbaNCNoCopyReceiver(){ +template +CorbaNCNoCopyReceiver::~CorbaNCNoCopyReceiver(){ _mySender->release(); - CORBA::release(_mySender); } -template -void *CorbaNCNoCopyReceiver::getDistValue(long &size) +template +T *CorbaNCNoCopyReceiver::getDistValue(long &size) { TSeqCorba seq=_mySender->send(); size=seq->length(); - return seq->get_buffer(1); + return (T *)seq->get_buffer(1); } -template -void *CorbaNCNoCopyReceiver::getValue(long &size) +template +T *CorbaNCNoCopyReceiver::getValue(long &size) { - return Receiver::getValue(size,_mySender); + return Receiver::getValue(size,_mySender); } -template -CorbaNCWithCopyReceiver::CorbaNCWithCopyReceiver(CorbaSender mySender):_mySender(mySender){ +template +CorbaNCWithCopyReceiver::CorbaNCWithCopyReceiver(CorbaSender mySender):_mySender(mySender){ } -template -CorbaNCWithCopyReceiver::~CorbaNCWithCopyReceiver(){ +template +CorbaNCWithCopyReceiver::~CorbaNCWithCopyReceiver(){ _mySender->release(); - CORBA::release(_mySender); } -template -void *CorbaNCWithCopyReceiver::getDistValue(long &size){ +template +T *CorbaNCWithCopyReceiver::getDistValue(long &size){ size=_mySender->getSize(); long n; T *ret=new T[size]; @@ -48,35 +67,34 @@ void *CorbaNCWithCopyReceiver::getDistValue(long for(long i=0;iTAILLE_SPLIT) - n=TAILLE_SPLIT; + n=TAILLE_SPLIT; else - n=size-i; + n=size-i; TSeqCorba seq=_mySender->sendPart(i,n); T *seqd=(T *)seq->get_buffer(0); for(long j=0;j -void *CorbaNCWithCopyReceiver::getValue(long &size) +template +T *CorbaNCWithCopyReceiver::getValue(long &size) { - return Receiver::getValue(size,_mySender); + return Receiver::getValue(size,_mySender); } -template -CorbaWCNoCopyReceiver::CorbaWCNoCopyReceiver(CorbaSender mySender):_mySender(mySender){ +template +CorbaWCNoCopyReceiver::CorbaWCNoCopyReceiver(CorbaSender mySender):_mySender(mySender){ } -template -CorbaWCNoCopyReceiver::~CorbaWCNoCopyReceiver(){ +template +CorbaWCNoCopyReceiver::~CorbaWCNoCopyReceiver(){ _mySender->release(); - CORBA::release(_mySender); } -template -void *CorbaWCNoCopyReceiver::getDistValue(long &size){ +template +T *CorbaWCNoCopyReceiver::getDistValue(long &size){ size=_mySender->getSize(); long n; T *ret=new T[size]; @@ -84,35 +102,34 @@ void *CorbaWCNoCopyReceiver::getDistValue(long & for(long i=0;iTAILLE_SPLIT) - n=TAILLE_SPLIT; + n=TAILLE_SPLIT; else - n=size-i; + n=size-i; TSeqCorba seq=_mySender->sendPart(i,n); TCorba *seqd=seq->get_buffer(0); for(long j=0;j -void *CorbaWCNoCopyReceiver::getValue(long &size) +template +T *CorbaWCNoCopyReceiver::getValue(long &size) { - return Receiver::getValue(size,_mySender); + return Receiver::getValue(size,_mySender); } -template -CorbaWCWithCopyReceiver::CorbaWCWithCopyReceiver(CorbaSender mySender):_mySender(mySender){ +template +CorbaWCWithCopyReceiver::CorbaWCWithCopyReceiver(CorbaSender mySender):_mySender(mySender){ } -template -CorbaWCWithCopyReceiver::~CorbaWCWithCopyReceiver(){ +template +CorbaWCWithCopyReceiver::~CorbaWCWithCopyReceiver(){ _mySender->release(); - CORBA::release(_mySender); } -template -void *CorbaWCWithCopyReceiver::getDistValue(long &size){ +template +T *CorbaWCWithCopyReceiver::getDistValue(long &size){ size=_mySender->getSize(); long n; T *ret=new T[size]; @@ -120,9 +137,9 @@ void *CorbaWCWithCopyReceiver::getDistValue(long for(long i=0;iTAILLE_SPLIT) - n=TAILLE_SPLIT; + n=TAILLE_SPLIT; else - n=size-i; + n=size-i; TSeqCorba seq=_mySender->sendPart(i,n); TCorba *seqd=seq->get_buffer(0); for(long j=0;j::getDistValue(long return ret; } -template -void *CorbaWCWithCopyReceiver::getValue(long &size) +template +T *CorbaWCWithCopyReceiver::getValue(long &size) { - return Receiver::getValue(size,_mySender); + return Receiver::getValue(size,_mySender); } #ifdef HAVE_MPI2 -template -MPIReceiver::MPIReceiver(SALOME::MPISender_ptr mySender):_mySender(mySender){ +template +MPIReceiver::MPIReceiver(CorbaSender mySender):_mySender(mySender){ } -template -MPIReceiver::~MPIReceiver(){ +template +MPIReceiver::~MPIReceiver(){ _mySender->release(); - CORBA::release(_mySender); } -template -void *MPIReceiver::getDistValue(long &size){ +template +T *MPIReceiver::getDistValue(long &size){ int i=0; int myproc; int sproc; MPI_Status status; MPI_Comm com; char port_name_clt [MPI_MAX_PORT_NAME]; - float telps, tuser, tsys, tcpu; T *_v; long _n; @@ -179,8 +194,8 @@ void *MPIReceiver::getDistValue(long &size){ else{ // Connect to service, get the inter-communicator server // Attention MPI_Comm_connect est un appel collectif : - // - Si lancement mpirun -c n -----> uniquement MPI_COMM_SELF fonctionne - // - Si lancement client_server&client_server ----> MPI_COMM_WORLD fonctionne + // - Si lancement mpirun -c n -----> uniquement MPI_COMM_SELF fonctionne + // - Si lancement client_server&client_server ----> MPI_COMM_WORLD fonctionne // TIMEOUT is inefficient since MPI_Comm_Connect doesn't return if we asked for // a service that has been unpublished ! @@ -197,17 +212,17 @@ void *MPIReceiver::getDistValue(long &size){ } MPI_Recv( &_n, 1, MPI_LONG, sproc,p->tag1,com,&status); _v = new T[_n]; - MPI_Recv( _v, _n, T2, sproc,p->tag2,com,&status); + MPI_Recv( _v, _n, MPITRAITS::MpiType, sproc,p->tag2,com,&status); _mySender->close(p); MPI_Comm_disconnect( &com ); size=_n; return _v; } -template -void *MPIReceiver::getValue(long &size) +template +T *MPIReceiver::getValue(long &size) { - return Receiver::getValue(size,_mySender); + return Receiver::getValue(size,_mySender); } #endif @@ -221,31 +236,30 @@ void *MPIReceiver::getValue(long &size) #include #include -template -SocketReceiver::SocketReceiver(SALOME::SocketSender_ptr mySender) : _mySender(mySender) +template +SocketReceiver::SocketReceiver(CorbaSender mySender) : _mySender(mySender) { _clientSockfd = -1; _senderDestruc=true; } -template -SocketReceiver::~SocketReceiver() +template +SocketReceiver::~SocketReceiver() { if(_senderDestruc) { _mySender->release(); - CORBA::release(_mySender); } } -template -void *SocketReceiver::getValue(long &size) +template +T *SocketReceiver::getValue(long &size) { - return Receiver::getValue(size,_mySender); + return Receiver::getValue(size,_mySender); } -template -void* SocketReceiver::getDistValue(long &size) +template +T* SocketReceiver::getDistValue(long &size) { int n=0, m; T *v; @@ -267,12 +281,12 @@ void* SocketReceiver::getDistValue(long &size) while( n < size*sizeof(T) ){ m = read(_clientSockfd, (char*)v+n, size*sizeof(T)-n); if( m < 0 ){ - closeCom(); - delete [] v; - SALOME::ExceptionStruct es; - es.type = SALOME::COMM; - es.text = "error read Socket exception"; - throw SALOME::SALOME_Exception(es); + closeCom(); + delete [] v; + SALOME::ExceptionStruct es; + es.type = SALOME::COMM; + es.text = "error read Socket exception"; + throw SALOME::SALOME_Exception(es); } n += m; } @@ -285,9 +299,9 @@ void* SocketReceiver::getDistValue(long &size) catch(SALOME::SALOME_Exception &ex){ if( ex.details.type == SALOME::COMM ) { - _senderDestruc=false; - cout << ex.details.text << endl; - throw MultiCommException("Unknown sender protocol"); + _senderDestruc=false; + std::cout << ex.details.text << std::endl; + throw MultiCommException("Unknown sender protocol"); } else throw ex; @@ -296,8 +310,8 @@ void* SocketReceiver::getDistValue(long &size) return v; } -template -void SocketReceiver::initCom() +template +void SocketReceiver::initCom() { try{ _mySender->initCom(); @@ -315,9 +329,9 @@ void SocketReceiver::initCom() catch(SALOME::SALOME_Exception &ex){ if( ex.details.type == SALOME::COMM ) { - _senderDestruc=false; - cout << ex.details.text << endl; - throw MultiCommException("Unknown sender protocol"); + _senderDestruc=false; + std::cout << ex.details.text << std::endl; + throw MultiCommException("Unknown sender protocol"); } else throw ex; @@ -325,8 +339,8 @@ void SocketReceiver::initCom() } -template -void SocketReceiver::connectCom(const char *dest_address, int port) +template +void SocketReceiver::connectCom(const char *dest_address, int port) { struct sockaddr_in serv_addr; struct hostent * server; @@ -348,8 +362,8 @@ void SocketReceiver::connectCom(const char *dest_address, int port) serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; bcopy((char *)server->h_addr, - (char *)&serv_addr.sin_addr.s_addr, - server->h_length); + (char *)&serv_addr.sin_addr.s_addr, + server->h_length); serv_addr.sin_port = htons(port); if( connect(_clientSockfd, (struct sockaddr *) & serv_addr, sizeof(struct sockaddr)) < 0 ){ @@ -366,9 +380,9 @@ void SocketReceiver::connectCom(const char *dest_address, int port) catch(SALOME::SALOME_Exception &ex){ if( ex.details.type == SALOME::COMM ) { - _senderDestruc=false; - cout << ex.details.text << endl; - throw MultiCommException("Unknown sender protocol"); + _senderDestruc=false; + std::cout << ex.details.text << std::endl; + throw MultiCommException("Unknown sender protocol"); } else throw ex; @@ -377,8 +391,8 @@ void SocketReceiver::connectCom(const char *dest_address, int port) } -template -void SocketReceiver::closeCom() +template +void SocketReceiver::closeCom() { _mySender->closeCom(); if( _clientSockfd >= 0 ){