roo_transport
API Documentation for roo_transport
Loading...
Searching...
No Matches
link_input_stream.h
Go to the documentation of this file.
1#pragma once
2
4#ifdef ROO_USE_THREADS
5
6#include "roo_io/core/input_stream.h"
8
9namespace roo_transport {
10
11class LinkInputStream : public roo_io::InputStream {
12 public:
13 LinkInputStream()
14 : channel_(nullptr), my_stream_id_(0), status_(roo_io::kClosed) {}
15
16 LinkInputStream(Channel& channel, uint32_t my_stream_id)
17 : channel_(&channel),
18 my_stream_id_(my_stream_id),
19 status_(my_stream_id == 0 ? roo_io::kClosed : roo_io::kOk) {}
20
21 LinkInputStream(const LinkInputStream&) = delete;
22 LinkInputStream& operator=(const LinkInputStream&) = delete;
23
24 LinkInputStream(LinkInputStream&& other);
25 LinkInputStream& operator=(LinkInputStream&& other);
26
27 void close() override;
28
29 size_t read(roo::byte* buf, size_t count) override;
30
31 size_t tryRead(roo::byte* buf, size_t count) override;
32
33 size_t available();
34 int read();
35 int peek();
36
37 roo_io::Status status() const override { return status_; }
38
39 private:
40 Channel* channel_;
41 uint32_t my_stream_id_;
42 roo_io::Status status_;
43};
44
45} // namespace roo_transport
46
47#endif // ROO_USE_THREADS