3#include <boost/asio.hpp>
23 bool reuseAddress =
false,
37 int rankOffset = 0)
override;
43 int requesterCommunicatorSize)
override;
49 int requesterCommunicatorSize)
override;
55 int requesterRank)
override;
75 void send(
double itemToSend,
Rank rankReceiver)
override;
81 void send(
int itemToSend,
Rank rankReceiver)
override;
87 void send(
bool itemToSend,
Rank rankReceiver)
override;
103 int rankSender)
override;
106 void receive(
double &itemToReceive,
Rank rankSender)
override;
112 void receive(
int &itemToReceive,
Rank rankSender)
override;
118 void receive(
bool &itemToReceive,
Rank rankSender)
override;
144 using Socket = boost::asio::ip::tcp::socket;
145 using WorkGuard = boost::asio::executor_work_guard<IOContext::executor_type>;
Interface for all interprocess communication classes.
Implements Communication by using sockets.
std::string getIpAddress()
std::unique_ptr< WorkGuard > _workGuard
PtrRequest aReceive(precice::span< double > itemsToReceive, int rankSender) override
Asynchronously receives an array of double values.
void cleanupEstablishment(std::string const &acceptorName, std::string const &requesterName) override
Clean-up environment used to establish the communication.
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.
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().
std::shared_ptr< IOContext > _ioContext
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.
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
boost::asio::io_context IOContext
void receive(std::string &itemToReceive, Rank rankSender) override
Receives a std::string from process with given rank.
boost::asio::executor_work_guard< IOContext::executor_type > WorkGuard
void closeConnection() override
Disconnects from communication space, i.e. participant.
void prepareEstablishment(std::string const &acceptorName, std::string const &requesterName) override
Prepare environment used to establish the communication.
~SocketCommunication() override
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=".")
PtrRequest aSend(precice::span< const int > itemsToSend, Rank rankReceiver) override
Asynchronously sends an array of integer values.
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().
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().
This class provides a lightweight logger.
A C++ 11 implementation of the non-owning C++20 std::span type.
contains the data communication abstraction layer.
std::string loopbackInterfaceName()
Returns the name of the canonical loopback interface on this system.