summaryrefslogtreecommitdiff
path: root/modules/remote-filesystem/examples/remote_read_file.cpp
blob: 39979d3bb468fc4962750e694def4047c397d1ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "../c++/transfer.hpp"

#include <forstio/codec/simple.hpp>

#include <iostream>

namespace sch {
using namespace saw::schema;

using Foo = Struct<
	Member<String, "a">,
	Member<Int64, "b">
>;
}

int main(){
	using namespace saw;

	remote<rmt::File> 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<sch::Foo,encode::KelSimple>({*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;

	{

		id<sch::Foo> foo_id{0u};
		auto eo_recv = dat_srv->receive(foo_id);
		if(eo_recv.is_error()){
			auto& err = eo_recv.get_error();
			std::cerr<<"Error: "<<err.get_category()<<" - "<<err.get_message()<<std::endl;
			return 4;
		}
		auto& recv = eo_recv.get_value();
		
		data<sch::Foo> nat_foo;
		codec<sch::Foo, encode::KelSimple> smp_cod;
		auto eov = smp_cod.decode(recv, nat_foo);
		if(eov.is_error()){
			return 3;
		}

		std::cout<<"a: ";
		for(uint64_t i = 0; i < nat_foo.template get<"a">().size().get();++i) std::cout<<nat_foo.template get<"a">().at(i);
		std::cout<<"\nb: "<<nat_foo.template get<"b">().get()<<std::endl;
	}
	return 0;
}