6 #include <boost/asio/io_service.hpp> 7 #include <boost/asio/ip/tcp.hpp> 8 #include <boost/asio/spawn.hpp> 19 template <
typename Res,
typename Params>
68 template <
typename Res,
typename Params>
71 using namespace boost;
72 asio::io_service io_service;
73 asio::spawn(io_service,
74 [&](asio::yield_context yield)
78 auto start = std::chrono::system_clock::now();
80 gethostname(machine, 512);
82 std::time_t start_time = std::chrono::system_clock::to_time_t(start);
83 std::cout <<
"slave starts work on machine " 86 << std::ctime(&start_time)
88 asio::ip::tcp::resolver resolver(io_service);
89 asio::ip::tcp::resolver::query query(master_name, port);
90 asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
91 asio::ip::tcp::socket socket(io_service);
92 asio::async_connect(socket, endpoint_iterator, yield);
96 system::error_code ec;
101 std::cout <<
"slave can't read on machine " 110 std::cout <<
"slave can't write on machine " 115 auto end = std::chrono::system_clock::now();
116 int elapsed_minutes = std::chrono::duration<double>(end - start).count() / 60.0;
117 if (elapsed_minutes >= duration)
119 std::time_t end_time = std::chrono::system_clock::to_time_t(end);
120 std::cout <<
"slave has finished on machine " 123 << std::ctime(&end_time)
129 catch (std::exception& e)
131 std::cout << e.what() << std::endl;
137 template <
typename Res,
typename Params>
message::result< Res > do_work(const message::request< Params > &)
Test an agent.
Definition: slave.hpp:138
int id
Definition: message.hpp:26
slave(const std::string &master_name, int port, worker w, int duration=1e6)
Standard constructor.
Definition: slave.hpp:43
int duration
Definition: slave.hpp:31
worker producer
Definition: slave.hpp:30
void run()
In a coroutine, initialize a connection with the master throught a socket and perform as many test as...
Definition: slave.hpp:69
boost::asio::ip::tcp::socket & get_socket()
Return the associated socket.
Definition: connection.hpp:84
int id
Definition: message.hpp:56
Represent the score performed by a freshly tested agent, can be (un)serialized.
Definition: message.hpp:54
void async_write(const T &t, boost::asio::yield_context yield)
Write a value through the associated socket.
Definition: connection.hpp:96
Handle serializable representations of agents.
std::string master_name
Definition: slave.hpp:27
std::function< message::result< Res >(const message::request< Params > &)> worker
Definition: slave.hpp:29
void async_read(T &t, boost::asio::yield_context yield)
Read a value through the associated socket. May return an error if the inner inputStream can't be rea...
Definition: connection.hpp:116
Handle networking.
Definition: connection.hpp:25
Represent an agent to be tested, can be (un)serialized.
Definition: message.hpp:24
Slave part of the algorithm, perform test on agents.
Definition: slave.hpp:25
std::string port
Definition: slave.hpp:28