1 #include "ReceiverFactory.hxx"
2 #include "Receivers.hxx"
5 #ifdef COMP_CORBA_DOUBLE
6 #define CorbaDNoCopyReceiver CorbaNCNoCopyReceiver
7 #define CorbaDWithCopyReceiver CorbaNCWithCopyReceiver
9 #define CorbaDNoCopyReceiver CorbaWCNoCopyReceiver
10 #define CorbaDWithCopyReceiver CorbaWCWithCopyReceiver
13 #ifdef COMP_CORBA_LONG
14 #define CorbaINoCopyReceiver CorbaNCNoCopyReceiver
15 #define CorbaIWithCopyReceiver CorbaNCWithCopyReceiver
17 #define CorbaINoCopyReceiver CorbaWCNoCopyReceiver
18 #define CorbaIWithCopyReceiver CorbaWCWithCopyReceiver
26 This method performs the transfert of double array with the remote SenderDouble given. If it fails with this SenderDouble it tries with an another protocol (CORBA by default).
28 double *ReceiverFactory::getValue(SALOME::SenderDouble_ptr sender,long &size)throw(MultiCommException)
32 ret=getValueOneShot(sender,size);
34 catch(MultiCommException&)
36 SALOME::SenderDouble_ptr newSender=sender->buildOtherWithProtocol(SALOME::CORBA_);
37 MESSAGE("PROTOCOL CHANGED TO CORBA");
39 ret=getValueOneShot(newSender,size);
40 CORBA::release(newSender);
46 This method performs the transfert of int array with the remote SenderInt given. If it fails with this SenderInt it tries with an another protocol (CORBA by default).
48 int *ReceiverFactory::getValue(SALOME::SenderInt_ptr sender,long &size)throw(MultiCommException)
52 ret=getValueOneShot(sender,size);
54 catch(MultiCommException&)
56 SALOME::SenderInt_ptr newSender=sender->buildOtherWithProtocol(SALOME::CORBA_);
57 MESSAGE("PROTOCOL CHANGED TO CORBA");
59 ret=getValueOneShot(newSender,size);
60 CORBA::release(newSender);
66 This method performs the transfert with the remote SenderDouble given. If it fails an exception is thrown.
68 double *ReceiverFactory::getValueOneShot(SALOME::SenderDouble_ptr sender,long &size)throw(MultiCommException)
70 SALOME::CorbaDoubleNCSender_ptr cncD_ptr;
71 SALOME::CorbaDoubleCSender_ptr cwcD_ptr;
73 SALOME::MPISenderDouble_ptr mpi_ptr=SALOME::MPISenderDouble::_narrow(sender);
76 SALOME::SocketSenderDouble_ptr sock_ptr=SALOME::SocketSenderDouble::_narrow(sender);
78 cncD_ptr=SALOME::CorbaDoubleNCSender::_narrow(sender);
79 cwcD_ptr=SALOME::CorbaDoubleCSender::_narrow(sender);
80 if(!CORBA::is_nil(cncD_ptr))
82 CORBA::release(sender);
83 CorbaDNoCopyReceiver<double,CORBA::Double,SALOME::vectorOfDouble_var,SALOME::CorbaDoubleNCSender_ptr,SALOME::SenderDouble_ptr,SALOME_SenderDouble_i> rec(cncD_ptr);
84 return rec.getValue(size);
86 else if(!CORBA::is_nil(cwcD_ptr))
88 CORBA::release(sender);
89 CorbaDWithCopyReceiver<double,CORBA::Double,SALOME::vectorOfDouble_var,SALOME::CorbaDoubleCSender_ptr,SALOME::SenderDouble_ptr,SALOME_SenderDouble_i> rec(cwcD_ptr);
90 return rec.getValue(size);
93 else if(!CORBA::is_nil(mpi_ptr))
95 CORBA::release(sender);
96 MPIReceiver<double,MPI_DOUBLE,SALOME::MPISenderDouble_ptr,SALOME::SenderDouble_ptr,SALOME_SenderDouble_i> rec(mpi_ptr);
97 return rec.getValue(size);
101 else if(!CORBA::is_nil(sock_ptr))
103 CORBA::release(sender);
104 SocketReceiver<double,xdr_double,SALOME::SocketSenderDouble_ptr,SALOME::SenderDouble_ptr,SALOME_SenderDouble_i> rec(sock_ptr);
105 return rec.getValue(size);
110 throw MultiCommException("Unknown sender protocol");
116 This method performs the transfert with the remote SenderInt given. If it fails an exception is thrown.
118 int *ReceiverFactory::getValueOneShot(SALOME::SenderInt_ptr sender,long &size)throw(MultiCommException)
120 SALOME::CorbaLongNCSender_ptr cncL_ptr;
121 SALOME::CorbaLongCSender_ptr cwcL_ptr;
123 SALOME::MPISenderInt_ptr mpi_ptr=SALOME::MPISenderInt::_narrow(sender);
126 SALOME::SocketSenderInt_ptr sock_ptr=SALOME::SocketSenderInt::_narrow(sender);
128 cncL_ptr=SALOME::CorbaLongNCSender::_narrow(sender);
129 cwcL_ptr=SALOME::CorbaLongCSender::_narrow(sender);
130 if(!CORBA::is_nil(cncL_ptr))
132 CORBA::release(sender);
133 CorbaINoCopyReceiver<int,CORBA::Long,SALOME::vectorOfLong_var,SALOME::CorbaLongNCSender_ptr,SALOME::SenderInt_ptr,SALOME_SenderInt_i> rec(cncL_ptr);
134 return rec.getValue(size);
136 else if(!CORBA::is_nil(cwcL_ptr))
138 CORBA::release(sender);
139 CorbaIWithCopyReceiver<int,CORBA::Long,SALOME::vectorOfLong_var,SALOME::CorbaLongCSender_ptr,SALOME::SenderInt_ptr,SALOME_SenderInt_i> rec(cwcL_ptr);
140 return rec.getValue(size);
143 else if(!CORBA::is_nil(mpi_ptr))
145 CORBA::release(sender);
146 MPIReceiver<int,MPI_INT,SALOME::MPISenderInt_ptr,SALOME::SenderInt_ptr,SALOME_SenderInt_i> rec(mpi_ptr);
147 return rec.getValue(size);
151 else if(!CORBA::is_nil(sock_ptr))
153 CORBA::release(sender);
154 SocketReceiver<int,xdr_int,SALOME::SocketSenderInt_ptr,SALOME::SenderInt_ptr,SALOME_SenderInt_i> rec(sock_ptr);
155 return rec.getValue(size);
160 throw MultiCommException("Unknown sender protocol");