6 #include <boost/asio/io_service.hpp> 7 #include <boost/asio/ip/tcp.hpp> 8 #include <boost/asio/spawn.hpp> 13 template <
typename Res,
typename Params>
16 std::string master_name;
23 slave(
const std::string& master_name,
int port, worker w,
int duration = 1e6)
24 : master_name(master_name), port(std::to_string(port)), producer(w), duration(duration)
31 template <
typename Res,
typename Params>
34 using namespace boost;
35 asio::io_service io_service;
36 asio::spawn(io_service,
37 [&](asio::yield_context yield)
41 auto start = std::chrono::system_clock::now();
43 gethostname(machine, 512);
45 std::time_t start_time = std::chrono::system_clock::to_time_t(start);
46 std::cout <<
"slave starts work on machine " 49 << std::ctime(&start_time)
51 asio::ip::tcp::resolver resolver(io_service);
52 asio::ip::tcp::resolver::query query(master_name, port);
53 asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
54 asio::ip::tcp::socket socket(io_service);
55 asio::async_connect(socket, endpoint_iterator, yield);
59 system::error_code ec;
64 std::cout <<
"slave can't read on machine " 73 std::cout <<
"slave can't write on machine " 78 auto end = std::chrono::system_clock::now();
79 int elapsed_minutes = std::chrono::duration<double>(end - start).count() / 60.0;
80 if (elapsed_minutes >= duration)
82 std::time_t end_time = std::chrono::system_clock::to_time_t(end);
83 std::cout <<
"slave has finished on machine " 86 << std::ctime(&end_time)
92 catch (std::exception& e)
94 std::cout << e.what() << std::endl;
100 template <
typename Res,
typename Params>
void async_read(T &t, boost::asio::yield_context yield)
Definition: connection.hpp:66
message::result< Res > do_work(const message::request< Params > &)
Definition: slave.hpp:101
int id
Definition: message.hpp:24
slave(const std::string &master_name, int port, worker w, int duration=1e6)
Definition: slave.hpp:23
boost::asio::ip::tcp::socket & get_socket()
Definition: connection.hpp:46
void run()
Definition: slave.hpp:32
int id
Definition: message.hpp:56
Represent a serialized agent freshly tested.
Definition: message.hpp:54
void async_write(const T &t, boost::asio::yield_context yield)
Definition: connection.hpp:52
Definition: connection.hpp:13
Represent a serialized agent extracted from an archive.
Definition: message.hpp:22