From 17431a0c95558ed61f092fa019231df89677ca0f Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Fri, 9 Aug 2024 18:26:48 +0200 Subject: wip --- modules/io_codec/c++/io_peer.hpp | 5 +- modules/io_codec/c++/io_peer.tmpl.hpp | 66 +++++++------------------- modules/io_codec/examples/peer_echo_client.cpp | 4 +- modules/io_codec/examples/peer_echo_server.cpp | 3 +- 4 files changed, 25 insertions(+), 53 deletions(-) (limited to 'modules/io_codec') diff --git a/modules/io_codec/c++/io_peer.hpp b/modules/io_codec/c++/io_peer.hpp index f8b986f..bd0af69 100644 --- a/modules/io_codec/c++/io_peer.hpp +++ b/modules/io_codec/c++/io_peer.hpp @@ -45,7 +45,7 @@ public: */ conveyor_feeder> &feeder(); - conveyor on_read_disconnected(); + conveyor on_disconnected(); private: /// @unimplemented @@ -88,6 +88,9 @@ private: conveyor_sink sink_write_; peer_conveyor_feeder conveyor_feeder_; + + conveyor_sink io_read_disconnected_; + own> disconnect_feeder_ = nullptr; }; /** diff --git a/modules/io_codec/c++/io_peer.tmpl.hpp b/modules/io_codec/c++/io_peer.tmpl.hpp index 967a8ab..0322631 100644 --- a/modules/io_codec/c++/io_peer.tmpl.hpp +++ b/modules/io_codec/c++/io_peer.tmpl.hpp @@ -29,29 +29,8 @@ streaming_io_peerread_done() .then([this](size_t bytes) -> error_or { - std::cout<<"Read done start: "<("Message too long"); } @@ -82,26 +61,6 @@ streaming_io_peerwrite_advance(len_val); - std::cout<<"read buff state: "; - std::cout< in_data{std::move(in_buff)}; incoming_feeder_->feed(std::move(in_data)); } @@ -123,7 +82,12 @@ streaming_io_peerfeed(); + } + return err; + }) .sink() }, conveyor_feeder_{ @@ -139,10 +103,8 @@ template streaming_io_peer::send(data msg) { - std::cout<<"O: "< streaming_io_peer streaming_io_peer 0u) { - std::cout<<"D"<write(&out_buffer_.read(), out_buffer_.read_segment_length()); } - std::cout<<"E"< conveyor streaming_io_peer::on_read_disconnected() { - return io_stream_->on_read_disconnected(); + BufferT>::on_disconnected() { + io_read_disconnected_ = io_stream_->on_read_disconnected().then([this](){ + if(disconnect_feeder_){ + disconnect_feeder_->feed(); + } + }).sink(); + + auto caf = new_conveyor_and_feeder(); + disconnect_feeder_ = std::move(caf.feeder); + return std::move(caf.conveyor); } template diff --git a/modules/io_codec/examples/peer_echo_client.cpp b/modules/io_codec/examples/peer_echo_client.cpp index d923bc7..3ae67ca 100644 --- a/modules/io_codec/examples/peer_echo_client.cpp +++ b/modules/io_codec/examples/peer_echo_client.cpp @@ -76,7 +76,9 @@ int main(){ }).detach(); auto peer_str = echo_peer_stream_p.first.get(); - peer_str->on_read_disconnected().attach(std::move(echo_peer_stream_p.first)).then([]() -> error_or{ + peer_str->on_disconnected().attach(std::move(echo_peer_stream_p.first)).then([&]() -> error_or{ + keep_running = false; + std::cout<<"disconnect"<("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 87bf721..d579622 100644 --- a/modules/io_codec/examples/peer_echo_server.cpp +++ b/modules/io_codec/examples/peer_echo_server.cpp @@ -86,7 +86,8 @@ int main(){ return make_void(); }).detach(); - peer_str->on_read_disconnected().attach(std::move(echo_peer_stream_p.first)).then([]() -> error_or{ + 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(); -- cgit v1.2.3