int UDP_Socket::recvObj(int commitTag, MovableObject &theObject, FEM_ObjectBroker &theBroker, ChannelAddress *theAddress) { int res = theObject.recvSelf(commitTag, *this, theBroker); if (res < 0) return res; // check the address that message came from was correct if (theAddress != 0) { SocketAddress *theSocketAddress = 0; if (theAddress->getType() == SOCKET_TYPE) { theSocketAddress = (SocketAddress *)theAddress; if (memcmp((char *) &theSocketAddress->address.addr, (char *) &other_Addr.addr, theSocketAddress->addrLength) != 0) { opserr << "UDP_Socket::recvObj() - a UDP_Socket "; opserr << "can only look at first incoming message\n"; opserr << "The last message did not come from write scource\n"; return -1; } } else { opserr << "UDP_Socket::recvObj() - a UDP_Socket "; opserr << "can only communicate with a UDP_Socket"; opserr << " address given is not of type SocketAddress\n"; return -1; } } return 0; }
int TCP_Socket::recvObj(int commitTag, MovableObject &theObject, FEM_ObjectBroker &theBroker, ChannelAddress *theAddress) { // first check address is the only address a TCP_socket can send to SocketAddress *theSocketAddress = 0; if (theAddress != 0) { if (theAddress->getType() == SOCKET_TYPE) theSocketAddress = (SocketAddress *)theAddress; else { opserr << "TCP_Socket::recvObj() - a TCP_Socket "; opserr << "can only communicate with a TCP_Socket"; opserr << " address given is not of type SocketAddress\n"; return -1; } if (bcmp((char *) &other_Addr.addr_in, (char *) &theSocketAddress->address.addr, theSocketAddress->addrLength) != 0) { opserr << "TCP_Socket::recvObj() - a TCP_Socket "; opserr << "can only communicate with one other TCP_Socket\n"; return -1; } } return theObject.recvSelf(commitTag, *this, theBroker); }
int FE_Datastore::recvObj(int commitTag, MovableObject &theObject, FEM_ObjectBroker &theNewBroker, ChannelAddress *theAddress) { return theObject.recvSelf(commitTag, *this, theNewBroker); }
int FileChannel::recvObj(int commitTag, MovableObject &theObject, FEM_ObjectBroker &theBroker, ChannelAddress *theAddress) { if ( !theFile ) return -1; setCommitStep( commitTag ); return theObject.recvSelf(commitTag, *this, theBroker); }
int MPI_Channel::recvObj(int commitTag, MovableObject &theObject, FEM_ObjectBroker &theBroker, ChannelAddress *theAddress) { // first check address is the only address a MPI_Channel can send to MPI_ChannelAddress *theMPI_ChannelAddress = 0; if (theAddress != 0) { if (theAddress->getType() == MPI_TYPE) { theMPI_ChannelAddress = (MPI_ChannelAddress *)theAddress; otherTag = theMPI_ChannelAddress->otherTag; otherComm= theMPI_ChannelAddress->otherComm; } else { opserr << "MPI_Channel::recvObj() - a MPI_Channel "; opserr << "can only communicate with a MPI_Channel"; opserr << " address given is not of type MPI_ChannelAddress\n"; return -1; } } return theObject.recvSelf(commitTag, *this, theBroker); }