#include "../c++/io.hpp" #include #include "echo.hpp" saw::error_or handle_echo_write(saw::io_stream& rmt_clt, saw::message& state, uint64_t tbw){ auto eov = rmt_clt.write(&state.data[state.already_written], tbw); if(eov.is_error()){ return std::move(eov.get_error()); } auto val = eov.get_value(); state.already_written += val; if(state.already_written > state.already_read){ exit(-1); } return saw::void_t{}; } void handle_echo_message(saw::io_stream& rmt_clt, bool& keep_running, saw::message& state){ rmt_clt.read_ready().then([&](){ for(;;){ uint64_t tbr = state.data.size() < state.already_read ? 0: state.data.size() - state.already_read; if(tbr == 0){ exit(-1); } auto eov = rmt_clt.read(&state.data[state.already_read], tbr); if(eov.is_error()){ auto& err = eov.get_error(); if(err.is_critical()){ std::cerr< state.data.size()){ state.already_read = state.data.size(); } if(trigger_write){ auto eov = handle_echo_write(rmt_clt, state, state.already_read - state.already_written); if(eov.is_error()){ auto& err = eov.get_error(); if(err.is_critical()){ std::cerr<<"After triggered write: "<get_network(); saw::own> addr = nullptr; saw::own> srv = nullptr; saw::own> remote_client = nullptr; saw::message msg_state; std::cout<<"Starting to resolve address"<accept().then([&](auto client) -> saw::error_or{ if(!remote_client){ std::cout<<"Accepted client"<(); }).detach(); }else{ keep_running = false; } }).detach([&](auto err) { std::cout<<"Failed to resolve address: "<