4 #include "ReceiverFactory.hxx"
5 #include "Receivers.hxx"
8 #ifdef COMP_CORBA_DOUBLE
9 #define CorbaDNoCopyReceiver CorbaNCNoCopyReceiver
10 #define CorbaDWithCopyReceiver CorbaNCWithCopyReceiver
12 #define CorbaDNoCopyReceiver CorbaWCNoCopyReceiver
13 #define CorbaDWithCopyReceiver CorbaWCWithCopyReceiver
16 #ifdef COMP_CORBA_LONG
17 #define CorbaINoCopyReceiver CorbaNCNoCopyReceiver
18 #define CorbaIWithCopyReceiver CorbaNCWithCopyReceiver
20 #define CorbaINoCopyReceiver CorbaWCNoCopyReceiver
21 #define CorbaIWithCopyReceiver CorbaWCWithCopyReceiver
29 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).
31 double *ReceiverFactory::getValue(SALOME::SenderDouble_ptr sender,long &size)throw(MultiCommException)
35 ret=getValueOneShot(sender,size);
37 catch(MultiCommException&)
39 SALOME::SenderDouble_ptr newSender=sender->buildOtherWithProtocol(SALOME::CORBA_);
40 MESSAGE("PROTOCOL CHANGED TO CORBA");
42 ret=getValueOneShot(newSender,size);
43 CORBA::release(newSender);
49 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).
51 int *ReceiverFactory::getValue(SALOME::SenderInt_ptr sender,long &size)throw(MultiCommException)
55 ret=getValueOneShot(sender,size);
57 catch(MultiCommException&)
59 SALOME::SenderInt_ptr newSender=sender->buildOtherWithProtocol(SALOME::CORBA_);
60 MESSAGE("PROTOCOL CHANGED TO CORBA");
62 ret=getValueOneShot(newSender,size);
63 CORBA::release(newSender);
69 This method performs the transfert with the remote SenderDouble given. If it fails an exception is thrown.
71 double *ReceiverFactory::getValueOneShot(SALOME::SenderDouble_ptr sender,long &size)throw(MultiCommException)
73 SALOME::CorbaDoubleNCSender_ptr cncD_ptr;
74 SALOME::CorbaDoubleCSender_ptr cwcD_ptr;
76 SALOME::MPISenderDouble_ptr mpi_ptr=SALOME::MPISenderDouble::_narrow(sender);
79 SALOME::SocketSenderDouble_ptr sock_ptr=SALOME::SocketSenderDouble::_narrow(sender);
81 cncD_ptr=SALOME::CorbaDoubleNCSender::_narrow(sender);
82 cwcD_ptr=SALOME::CorbaDoubleCSender::_narrow(sender);
83 if(!CORBA::is_nil(cncD_ptr))
85 CORBA::release(sender);
86 CorbaDNoCopyReceiver<double,CORBA::Double,SALOME::vectorOfDouble_var,SALOME::CorbaDoubleNCSender_ptr,SALOME::SenderDouble_ptr,SALOME_SenderDouble_i> rec(cncD_ptr);
87 return rec.getValue(size);
89 else if(!CORBA::is_nil(cwcD_ptr))
91 CORBA::release(sender);
92 CorbaDWithCopyReceiver<double,CORBA::Double,SALOME::vectorOfDouble_var,SALOME::CorbaDoubleCSender_ptr,SALOME::SenderDouble_ptr,SALOME_SenderDouble_i> rec(cwcD_ptr);
93 return rec.getValue(size);
96 else if(!CORBA::is_nil(mpi_ptr))
98 CORBA::release(sender);
99 MPIReceiver<double,MPI_DOUBLE,SALOME::MPISenderDouble_ptr,SALOME::SenderDouble_ptr,SALOME_SenderDouble_i> rec(mpi_ptr);
100 return rec.getValue(size);
104 else if(!CORBA::is_nil(sock_ptr))
106 CORBA::release(sender);
107 SocketReceiver<double,xdr_double,SALOME::SocketSenderDouble_ptr,SALOME::SenderDouble_ptr,SALOME_SenderDouble_i> rec(sock_ptr);
108 return rec.getValue(size);
113 throw MultiCommException("Unknown sender protocol");
119 This method performs the transfert with the remote SenderInt given. If it fails an exception is thrown.
121 int *ReceiverFactory::getValueOneShot(SALOME::SenderInt_ptr sender,long &size)throw(MultiCommException)
123 SALOME::CorbaLongNCSender_ptr cncL_ptr;
124 SALOME::CorbaLongCSender_ptr cwcL_ptr;
126 SALOME::MPISenderInt_ptr mpi_ptr=SALOME::MPISenderInt::_narrow(sender);
129 SALOME::SocketSenderInt_ptr sock_ptr=SALOME::SocketSenderInt::_narrow(sender);
131 cncL_ptr=SALOME::CorbaLongNCSender::_narrow(sender);
132 cwcL_ptr=SALOME::CorbaLongCSender::_narrow(sender);
133 if(!CORBA::is_nil(cncL_ptr))
135 CORBA::release(sender);
136 CorbaINoCopyReceiver<int,CORBA::Long,SALOME::vectorOfLong_var,SALOME::CorbaLongNCSender_ptr,SALOME::SenderInt_ptr,SALOME_SenderInt_i> rec(cncL_ptr);
137 return rec.getValue(size);
139 else if(!CORBA::is_nil(cwcL_ptr))
141 CORBA::release(sender);
142 CorbaIWithCopyReceiver<int,CORBA::Long,SALOME::vectorOfLong_var,SALOME::CorbaLongCSender_ptr,SALOME::SenderInt_ptr,SALOME_SenderInt_i> rec(cwcL_ptr);
143 return rec.getValue(size);
146 else if(!CORBA::is_nil(mpi_ptr))
148 CORBA::release(sender);
149 MPIReceiver<int,MPI_INT,SALOME::MPISenderInt_ptr,SALOME::SenderInt_ptr,SALOME_SenderInt_i> rec(mpi_ptr);
150 return rec.getValue(size);
154 else if(!CORBA::is_nil(sock_ptr))
156 CORBA::release(sender);
157 SocketReceiver<int,xdr_int,SALOME::SocketSenderInt_ptr,SALOME::SenderInt_ptr,SALOME_SenderInt_i> rec(sock_ptr);
158 return rec.getValue(size);
163 throw MultiCommException("Unknown sender protocol");