#include "echo.hpp" #include "../c++/io_peer.hpp" #include #include int main(){ using namespace saw; 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(); data nat_echo{"hello"}; data simple_echo; codec simple_codec; { auto eov = simple_codec.encode(nat_echo, simple_echo); if(eov.is_error()){ return -1; } } auto echo_srv = network.listen(*addr); if(!echo_srv){ return -2; } echo_srv->accept().then([&](saw::own client){ if(!client){ keep_running = false; 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 client"< error_or { data nat_resp; { auto eov = simple_codec.decode(simp_resp, nat_resp); if(eov.is_error()){ std::cerr<<"Failed to decode"<send(std::move(simp_resp)); if(eo_send.is_error()){ auto& err = eo_send.get_error(); return std::move(err); } } return make_void(); }).detach(); peer_str->on_disconnected().attach(std::move(echo_peer_stream_p.first)).then([]() -> error_or{ std::cout<<"Disconnected client"<("Destroy pipeline on purpose :>"); }).detach(); }).detach(); while(keep_running){ wait.wait_for(1u*1000*1000); } return 0; }