From c0424e7a55250705579ee64c269892677fa86adf Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Fri, 15 Mar 2024 14:41:47 +0100 Subject: async,io: Fixed immediate issues in async and built a basic io echo_server --- modules/io/examples/echo_server.cpp | 71 +++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) (limited to 'modules/io/examples/echo_server.cpp') diff --git a/modules/io/examples/echo_server.cpp b/modules/io/examples/echo_server.cpp index a158368..50863db 100644 --- a/modules/io/examples/echo_server.cpp +++ b/modules/io/examples/echo_server.cpp @@ -4,6 +4,21 @@ #include "echo.hpp" +saw::error_or handle_echo_write(saw::io_stream& rmt_clt, 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, message& state){ rmt_clt.read_ready().then([&](){ for(;;){ @@ -11,12 +26,61 @@ void handle_echo_message(saw::io_stream& rmt_clt, bool& keep_running, message& s if(tbr == 0){ exit(-1); } - auto eov = rmt_clt.read(&state.data[0], tbr); + 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<accept().then([&](auto client) -> saw::error_or{ + if(!remote_client){ + std::cout<<"Accepted client"<