From b101481315dec728b7c4fb466322ac861cd6dcf2 Mon Sep 17 00:00:00 2001 From: Claudius 'keldu' Holeksa Date: Wed, 14 Aug 2024 17:18:08 +0200 Subject: wip --- modules/core/c++/buffer.cpp | 10 ++-- modules/remote-filesystem/c++/transfer.hpp | 17 +++++-- modules/remote-filesystem/examples/SConscript | 10 +++- .../examples/remote_write_file.cpp | 58 ++++++++++++++++++++++ modules/remote-filesystem/tests/transport.cpp | 6 +-- 5 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 modules/remote-filesystem/examples/remote_write_file.cpp (limited to 'modules') diff --git a/modules/core/c++/buffer.cpp b/modules/core/c++/buffer.cpp index 5312e86..dde723a 100644 --- a/modules/core/c++/buffer.cpp +++ b/modules/core/c++/buffer.cpp @@ -6,6 +6,8 @@ #include #include +#include + namespace saw { error buffer::push(const uint8_t &value) { size_t write_remain = write_composite_length(); @@ -19,9 +21,9 @@ error buffer::push(const uint8_t &value) { } error buffer::push(const uint8_t &buffer, size_t size) { - error error = write_require_length(size); - if (error.failed()) { - return error; + error err = write_require_length(size); + if (err.failed()) { + return err; } const uint8_t *buffer_ptr = &buffer; while (size > 0) { @@ -31,6 +33,8 @@ error buffer::push(const uint8_t &buffer, size_t size) { size -= segment; buffer_ptr += segment; } + + std::cout<<"Read: "< +#include + namespace saw { template class data_server final : public i_data_server { @@ -41,7 +43,7 @@ public: return generate_invalid_id_error(); } - std::basic_fstream s{addr_.get_path(), s.binary | s.out}; + std::basic_ofstream s{addr_.get_path(), s.binary | s.out | s.trunc}; if(!s.is_open()){ return make_error("Couldn't open file"); } @@ -50,9 +52,16 @@ public: buffer_view buff_v{buff}; while(buff_v.read_segment_length() > 0u){ s.write(&buff_v.read(), buff_v.read_segment_length()); - buff_v.read_advance(buff_v.read_segment_length()); } + s.flush(); + if(s.bad()){ + return make_error("Stream failed to write."); + } + + if(s.fail()){ + return make_error("Stream encountered non-integer data."); + } return make_void(); } @@ -76,13 +85,15 @@ public: } data dat{heap(1u)}; + std::basic_fstream s{addr_.get_path(), s.binary | s.in}; if(!s.is_open()){ return make_error("Couldn't open file"); } uint8_t ele{}; while(s.readsome(&ele, 1u) > 0u){ - auto err = dat.get_buffer().push(ele); + + auto err = dat.get_buffer().push(ele,1u); if(err.failed()){ return err; } diff --git a/modules/remote-filesystem/examples/SConscript b/modules/remote-filesystem/examples/SConscript index df8e0c6..3e039b7 100644 --- a/modules/remote-filesystem/examples/SConscript +++ b/modules/remote-filesystem/examples/SConscript @@ -18,11 +18,19 @@ examples_env.headers = sorted(glob.glob(dir_path + "/*.hpp")) env.sources += examples_env.sources; env.headers += examples_env.headers; -objects_static = [] +examples_objects = []; +examples_env.add_source_files(examples_objects, ['remote_write_file.cpp'], shared=False); +examples_env.remote_file_write = examples_env.Program('#bin/remote_write_file', [env.library_static, examples_objects]); + +examples_objects = []; +examples_env.add_source_files(examples_objects, ['remote_read_file.cpp'], shared=False); +examples_env.remote_file_read = examples_env.Program('#bin/remote_read_file', [env.library_static, examples_objects]); + # Set Alias env.examples = [ #, examples_env.echo_server + examples_env.remote_file_write ]; env.Alias('examples', env.examples); diff --git a/modules/remote-filesystem/examples/remote_write_file.cpp b/modules/remote-filesystem/examples/remote_write_file.cpp new file mode 100644 index 0000000..938b140 --- /dev/null +++ b/modules/remote-filesystem/examples/remote_write_file.cpp @@ -0,0 +1,58 @@ +#include "../c++/transfer.hpp" + +#include + +#include + +namespace sch { +using namespace saw::schema; + +using Foo = Struct< + Member, + Member +>; +} + +int main(){ + using namespace saw; + + remote file_remote; + + auto eo_addr = file_remote.parse_address("./example_file"); + if(eo_addr.is_error()){ + return 1; + } + auto& addr = eo_addr.get_value(); + + auto eo_dat_srv = file_remote.template data_listen({*addr}); + if(eo_dat_srv.is_error()){ + return 2; + } + auto& dat_srv = eo_dat_srv.get_value(); + + std::string a = "blafoobla"; + int64_t b = 42; + + { + data nat_foo; + nat_foo.template get<"a">().set(a); + nat_foo.template get<"b">().set(b); + + data smp_foo; + + codec smp_cod; + auto eov = smp_cod.encode(nat_foo,smp_foo); + if(eov.is_error()){ + return 3; + } + + id foo_id{0u}; + auto eo_send = dat_srv->send(smp_foo, foo_id); + if(eo_send.is_error()){ + auto& err = eo_send.get_error(); + std::cerr<<"Error: "< file_remote; @@ -45,16 +46,15 @@ SAW_TEST("File Remote"){ SAW_EOV_EXPECT(eo_send, "Failed to send."); } { - data nat_foo; - id foo_id{0u}; auto eo_recv = dat_srv->receive(foo_id); SAW_EOV_EXPECT(eo_recv, "Failed to receive"); auto& recv = eo_recv.get_value(); + data nat_foo; codec smp_cod; auto eov = smp_cod.decode(recv, nat_foo); - SAW_EOV_EXPECT(eov, "Failed to decode."); + SAW_EOV_EXPECT(eov, std::string{"Failed to decode. Buffer has size "} + std::to_string(recv.get_buffer().read_composite_length())); SAW_EXPECT(nat_foo.template get<"b">().get() == b, "Wrong value."); } -- cgit v1.2.3