3#include <boost/asio.hpp>
24 bool reuseAddress =
false,
38 int rankOffset = 0)
override;
44 int requesterCommunicatorSize)
override;
50 int requesterCommunicatorSize)
override;
56 int requesterRank)
override;
76 virtual void send(
double itemToSend,
Rank rankReceiver)
override;
82 virtual void send(
int itemToSend,
Rank rankReceiver)
override;
88 virtual void send(
bool itemToSend,
Rank rankReceiver)
override;
104 int rankSender)
override;
107 virtual void receive(
double &itemToReceive,
Rank rankSender)
override;
113 virtual void receive(
int &itemToReceive,
Rank rankSender)
override;
119 virtual void receive(
bool &itemToReceive,
Rank rankSender)
override;
145 using Socket = boost::asio::ip::tcp::socket;
146 using Work = boost::asio::io_service::work;
Interface for all interprocess communication classes.
Implements Communication by using sockets.
std::string getIpAddress()
virtual PtrRequest aReceive(precice::span< double > itemsToReceive, int rankSender) override
Asynchronously receives an array of double values.
boost::asio::io_service::work Work
virtual void cleanupEstablishment(std::string const &acceptorName, std::string const &requesterName) override
Clean-up environment used to establish the communication.
virtual void send(std::string const &itemToSend, Rank rankReceiver) override
Sends a std::string to process with given rank.
std::string _addressDirectory
Directory where IP address is exchanged by file.
virtual void acceptConnectionAsServer(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int requesterCommunicatorSize) override
Accepts connection from another communicator, which has to call requestConnectionAsClient().
virtual ~SocketCommunication()
virtual void requestConnectionAsClient(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, std::set< int > const &acceptorRanks, int requesterRank) override
Connects to another communicator, which has to call acceptConnectionAsServer().
std::string _networkName
Name of network to communicate over.
virtual size_t getRemoteCommunicatorSize() override
Returns the number of processes in the remote communicator.
std::map< int, std::shared_ptr< Socket > > _sockets
Remote rank -> socket map.
boost::asio::ip::tcp::socket Socket
virtual void receive(std::string &itemToReceive, Rank rankSender) override
Receives a std::string from process with given rank.
std::shared_ptr< Work > _work
boost::asio::io_service IOService
virtual void closeConnection() override
Disconnects from communication space, i.e. participant.
virtual void prepareEstablishment(std::string const &acceptorName, std::string const &requesterName) override
Prepare environment used to establish the communication.
unsigned short _portNumber
Port used for socket connection.
SocketCommunication(unsigned short portNumber=0, bool reuseAddress=false, std::string networkName=utils::networking::loopbackInterfaceName(), std::string addressDirectory=".")
virtual PtrRequest aSend(precice::span< const int > itemsToSend, Rank rankReceiver) override
Asynchronously sends an array of integer values.
virtual void requestConnection(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int requesterRank, int requesterCommunicatorSize) override
Connects to another communicator, which has to call acceptConnection().
virtual void acceptConnection(std::string const &acceptorName, std::string const &requesterName, std::string const &tag, int acceptorRank, int rankOffset=0) override
Accepts connection from another communicator, which has to call requestConnection().
std::shared_ptr< IOService > _ioService
This class provides a lightweight logger.
A C++ 11 implementation of the non-owning C++20 std::span type.
std::string loopbackInterfaceName()
Returns the name of the canonical loopback interface on this system.
Main namespace of the precice library.