From ea306799624d0390074f6afa5d38644cce076c9f Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Wed, 24 Jul 2024 11:09:55 +0200 Subject: wip --- modules/io_codec/c++/io_peer.hpp | 22 +++++++++------- modules/io_codec/c++/io_peer.tmpl.hpp | 36 +++++++++++++------------- modules/io_codec/examples/peer_echo_client.cpp | 4 ++- 3 files changed, 33 insertions(+), 29 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 f576cbe..613f60e 100644 --- a/modules/io_codec/c++/io_peer.hpp +++ b/modules/io_codec/c++/io_peer.hpp @@ -11,19 +11,21 @@ template class streaming_io_peer { +private: + static_assert(not std::is_same_v, "The native encoding by definition is not fit for transport."); public: /** * Constructor with the option to provide a custom codec, in and out buffer */ streaming_io_peer( - own>> feed, - own stream, codec in_codec, codec out_codec, BufferT in, BufferT out); + own>> feed, + own stream, codec in_codec, codec out_codec, BufferT in, BufferT out); /** * Constructor with mostly default assignements */ streaming_io_peer( - own>> feed, + own>> feed, own stream); /** @@ -35,25 +37,25 @@ public: /** * Send a message to the remote peer */ - error_or send(data builder); + error_or send(data builder); /** * A phantom conveyor feeder. Meant for interfacing with other components */ - conveyor_feeder> &feeder(); + conveyor_feeder> &feeder(); conveyor on_read_disconnected(); private: /// @unimplemented class peer_conveyor_feeder final - : public conveyor_feeder> { + : public conveyor_feeder> { public: peer_conveyor_feeder( streaming_io_peer &peer_) : peer_{peer_} {} - void feed(data &&data_) override { + void feed(data &&data_) override { (void)data_; } @@ -63,14 +65,14 @@ private: size_t queued() const override { return 0; } - error_or swap(conveyor> &&conveyor) noexcept override { return make_error();} + error_or swap(conveyor> &&) noexcept override { return make_error();} private: streaming_io_peer &peer_; }; private: - own>> + own>> incoming_feeder_ = nullptr; own io_stream_; @@ -95,7 +97,7 @@ template std::pair>, - conveyor>> + conveyor>> new_streaming_io_peer(own stream); } // namespace saw diff --git a/modules/io_codec/c++/io_peer.tmpl.hpp b/modules/io_codec/c++/io_peer.tmpl.hpp index d9dfe04..b7ccb49 100644 --- a/modules/io_codec/c++/io_peer.tmpl.hpp +++ b/modules/io_codec/c++/io_peer.tmpl.hpp @@ -1,20 +1,20 @@ namespace saw { -template streaming_io_peer:: streaming_io_peer( - own>> feed, + own>> feed, own str) : streaming_io_peer{std::move(feed), std::move(str), {}, {}, {}, {}} {} -template +template streaming_io_peer:: streaming_io_peer( - own>> feed, - own stream, codec in_codec, codec out_codec, BufferT in, BufferT out) + own>> feed, + own stream, codec in_codec, codec out_codec, BufferT in, BufferT out) : incoming_feeder_{std::move(feed)}, io_stream_{std::move(stream)}, in_codec_{std::move(in_codec)}, @@ -34,7 +34,7 @@ streaming_io_peer{in_view}; + auto in_data = data{in_view}; incoming_feeder_->feed(std::move(in_data)); } @@ -61,14 +61,14 @@ streaming_io_peerread(&in_buffer_.write(), 1, in_buffer_.write_segment_length()); } -template -error_or streaming_io_peer::send(data +template +error_or streaming_io_peer::send(data msg) { bool restart_write = out_buffer_.read_segment_length() == 0; - data enc; + data enc; auto eov = out_codec_.encode(msg, enc);//msg.read(), out_buffer_); @@ -84,22 +84,22 @@ error_or streaming_io_peer conveyor -streaming_io_peer::on_read_disconnected() { return io_stream_->on_read_disconnected(); } -template -std::pair>, - conveyor>> +template +std::pair>, + conveyor>> new_streaming_io_peer(own stream) { auto caf = - new_conveyor_and_feeder>(); + new_conveyor_and_feeder>(); - return {heap>( + return {heap>( std::move(caf.feeder), std::move(stream)), std::move(caf.conveyor)}; } diff --git a/modules/io_codec/examples/peer_echo_client.cpp b/modules/io_codec/examples/peer_echo_client.cpp index f1836e4..b09a51a 100644 --- a/modules/io_codec/examples/peer_echo_client.cpp +++ b/modules/io_codec/examples/peer_echo_client.cpp @@ -4,6 +4,8 @@ #include +#include + int main(){ using namespace saw; @@ -34,7 +36,7 @@ int main(){ network.connect(*addr).then([](saw::own client){ auto echo_stream = saw::heap(std::move(client)); - auto echo_peer_stream_p = saw::new_streaming_io_peer(std::move(echo_stream)); + auto echo_peer_stream_p = saw::new_streaming_io_peer, encode::KelSimple, ring_buffer>(std::move(echo_stream)); echo_peer_stream_p.first->on_read_disconnected().attach(std::move(echo_peer_stream_p.first)).detach(); }).detach(); -- cgit v1.2.3