diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-09 18:54:09 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-08-09 18:54:09 +0200 |
commit | df2e8e4463c9bc348e672fd894250a9cd6e13cfa (patch) | |
tree | 682279fc56c693cc1f4816782fe3d2dd82aace56 /modules/io_codec | |
parent | 17431a0c95558ed61f092fa019231df89677ca0f (diff) |
wip
Diffstat (limited to 'modules/io_codec')
-rw-r--r-- | modules/io_codec/examples/peer_echo_client.cpp | 39 | ||||
-rw-r--r-- | modules/io_codec/examples/peer_echo_server.cpp | 3 |
2 files changed, 36 insertions, 6 deletions
diff --git a/modules/io_codec/examples/peer_echo_client.cpp b/modules/io_codec/examples/peer_echo_client.cpp index 3ae67ca..40f3aa3 100644 --- a/modules/io_codec/examples/peer_echo_client.cpp +++ b/modules/io_codec/examples/peer_echo_client.cpp @@ -3,12 +3,38 @@ #include "../c++/io_peer.hpp" #include <forstio/codec/transport.hpp> +#include <forstio/codec/args.hpp> #include <iostream> -int main(){ +namespace sch { +using namespace saw::schema; + +using EchoArgs = Args< + Struct<>, + Tuple<String> +>; +} + +int main(int argc, char** argv){ using namespace saw; + data<sch::EchoArgs, encode::Args> dat_args{ + argc, + argv + }; + + codec<sch::EchoArgs, encode::Args> codec_args; + + data<sch::EchoArgs> dat_nat; + auto eov = codec_args.decode(dat_args, dat_nat); + if(eov.is_error()){ + return -1; + } + + auto& tup = dat_nat.template get<"positionals">(); + 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(); @@ -34,7 +60,6 @@ int main(){ } auto& addr = eo_addr.get_value(); - data<sch::Echo> nat_echo{"hello"}; codec<sch::Echo, encode::KelSimple> simple_codec; network.connect(*addr).then([&](saw::own<saw::io_stream> client){ @@ -65,20 +90,26 @@ int main(){ echo_peer_stream_p.second.then([&](auto simp_resp){ data<sch::Echo> nat_resp; auto eov = simple_codec.decode(simp_resp, nat_resp); + if(nat_resp.size() != nat_echo.size()){ + exit(-1); + } std::cout<<"Answer:\n"; for(uint64_t i = 0u; i < nat_resp.size(); ++i){ + if (nat_resp.at(i) != nat_echo.at(i)){ + exit(-2); + } std::cout<<nat_resp.at(i); } std::cout<<std::endl; - return eov; keep_running = false; + return eov; }).detach(); auto peer_str = echo_peer_stream_p.first.get(); peer_str->on_disconnected().attach(std::move(echo_peer_stream_p.first)).then([&]() -> error_or<void>{ keep_running = false; - std::cout<<"disconnect"<<std::endl; + std::cout<<"Disconnected"<<std::endl; return make_error<err::critical>("Destroy pipeline on purpose :>"); }).detach(); diff --git a/modules/io_codec/examples/peer_echo_server.cpp b/modules/io_codec/examples/peer_echo_server.cpp index d579622..1849517 100644 --- a/modules/io_codec/examples/peer_echo_server.cpp +++ b/modules/io_codec/examples/peer_echo_server.cpp @@ -58,11 +58,10 @@ int main(){ auto echo_stream = saw::heap<saw::async_io_stream>(std::move(client)); auto echo_peer_stream_p = saw::new_streaming_io_peer<sch::Echo, sch::Echo, trans::FixedLength<8u>, encode::KelSimple, ring_buffer>(std::move(echo_stream)); - std::cout<<"Got client"<<std::endl; + std::cout<<"Connected client"<<std::endl; auto peer_str = echo_peer_stream_p.first.get(); echo_peer_stream_p.second.then([&,peer_str](auto simp_resp) -> error_or<void> { - std::cout<<"Request\n"; data<sch::Echo> nat_resp; { auto eov = simple_codec.decode(simp_resp, nat_resp); |