#include "echo.hpp" #include "../c++/io_peer.hpp" #include #include #include namespace sch { using namespace saw::schema; using EchoArgs = Args< Struct<>, Tuple >; } int main(int argc, char** argv){ using namespace saw; data dat_args{ argc, argv }; codec codec_args; data dat_nat; auto eov = codec_args.decode(dat_args, dat_nat); if(eov.is_error()){ auto& err = eov.get_error(); std::cout<0u){ std::cout<<" - "<(); auto& nat_echo = tup.template get<0>(); auto eo_aio = saw::setup_async_io(); if(eo_aio.is_error()){ auto& err = eo_aio.get_error(); std::cerr<get_network(); auto eo_addr = network.resolve_address(saw::echo_address, saw::echo_port).take(); if(eo_addr.is_error()){ return -1; } auto& addr = eo_addr.get_value(); codec simple_codec; network.connect(*addr).then([&](saw::own client){ if(!client){ return; } auto echo_stream = saw::heap(std::move(client)); auto echo_peer_stream_p = saw::new_streaming_io_peer, encode::KelSimple, ring_buffer>(std::move(echo_stream)); std::cout<<"Connected"< simple_echo; { auto eov = simple_codec.encode(nat_echo, simple_echo); if(eov.is_error()){ return; } } { auto eo_send = echo_peer_stream_p.first->send(std::move(simple_echo)); if(eo_send.is_error()){ return; } } std::cout<<"Sent data"< nat_resp; auto eov = simple_codec.decode(simp_resp, nat_resp); if(nat_resp.size() != nat_echo.size()){ exit(-2); } std::cout<<"Answer:\n"; for(uint64_t i = 0u; i < nat_resp.size(); ++i){ if (nat_resp.at(i) != nat_echo.at(i)){ exit(-3); } std::cout<on_disconnected().attach(std::move(echo_peer_stream_p.first)).then([&]() -> error_or{ keep_running = false; std::cout<<"Disconnected"<("Destroy pipeline on purpose :>"); }).detach(); }).detach(); while(keep_running){ wait.wait_for(1000*1000); } return 0; }