summaryrefslogtreecommitdiff
path: root/modules/io_codec
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-09 18:54:09 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-08-09 18:54:09 +0200
commitdf2e8e4463c9bc348e672fd894250a9cd6e13cfa (patch)
tree682279fc56c693cc1f4816782fe3d2dd82aace56 /modules/io_codec
parent17431a0c95558ed61f092fa019231df89677ca0f (diff)
wip
Diffstat (limited to 'modules/io_codec')
-rw-r--r--modules/io_codec/examples/peer_echo_client.cpp39
-rw-r--r--modules/io_codec/examples/peer_echo_server.cpp3
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);