NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
async_stream.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_ASYNC_ASYNC_STREAM_HPP__
2#define NEFORCE_CORE_ASYNC_ASYNC_STREAM_HPP__
3
11
16NEFORCE_BEGIN_NAMESPACE__
17
23
33class NEFORCE_API async_stream {
34public:
38 virtual ~async_stream() = default;
39
46 virtual void async_read(io_context& ctx, memory_view<char> buffer, function<void(error_code, size_t)> handler) = 0;
47
55 virtual void async_read(io_context& ctx, memory_view<char> buffer, cancellation_slot& slot,
56 function<void(error_code, size_t)> handler) = 0;
57
65 function<void(error_code, size_t)> handler) = 0;
66
75 function<void(error_code, size_t)> handler) = 0;
76
86 template <typename Token, enable_if_t<!is_same_v<decay_t<Token>, function<void(error_code, size_t)>>, int> = 0>
87 void async_read(io_context& ctx, memory_view<char> buffer, Token&& token) {
88 async_read(ctx, buffer, function<void(error_code, size_t)>(forward<Token>(token)));
89 }
90
97 auto async_read(io_context& ctx, memory_view<char> buffer, use_future_t /*unused*/) {
98 async_result<use_future_t, void(error_code, size_t)> result(use_future);
99 async_read(ctx, buffer, function<void(error_code, size_t)>(result.get_handler()));
100 return result.get();
101 }
102
108 void async_read(io_context& ctx, memory_view<char> buffer, detached_t /*unused*/) {
109 async_read(ctx, buffer, function<void(error_code, size_t)>([](error_code, size_t) {}));
110 }
111
112#ifdef NEFORCE_STANDARD_20
121 async_read(ctx, buffer, function<void(error_code, size_t)>(result.get_handler()));
122 return result.get();
123 }
124#endif
125
135 template <typename Token, enable_if_t<!is_same_v<decay_t<Token>, function<void(error_code, size_t)>>, int> = 0>
136 void async_write(io_context& ctx, memory_view<const char> buffer, Token&& token) {
137 async_write(ctx, buffer, function<void(error_code, size_t)>(forward<Token>(token)));
138 }
139
147 async_result<use_future_t, void(error_code, size_t)> result(use_future);
148 async_write(ctx, buffer, function<void(error_code, size_t)>(result.get_handler()));
149 return result.get();
150 }
151
158 async_write(ctx, buffer, function<void(error_code, size_t)>([](error_code, size_t) {}));
159 }
160
161#ifdef NEFORCE_STANDARD_20
170 async_write(ctx, buffer, function<void(error_code, size_t)>(result.get_handler()));
171 return result.get();
172 }
173#endif
174
183 void async_read(io_context& ctx, mutable_buffers& bufs, function<void(error_code, size_t)> handler);
184
193 void async_write(io_context& ctx, const_buffers& bufs, function<void(error_code, size_t)> handler);
194
204 void async_read(io_context& ctx, dynamic_buffer& buf, size_t n, function<void(error_code, size_t)> handler) {
205 auto region = buf.prepare(n);
206 async_read(ctx, region, [&buf, h = move(handler)](error_code ec, size_t bytes) mutable {
207 if (!ec) {
208 buf.commit(bytes);
209 }
210 h(ec, bytes);
211 });
212 }
213};
214 // AsyncStream
216
217NEFORCE_END_NAMESPACE__
218#endif // NEFORCE_CORE_ASYNC_ASYNC_STREAM_HPP__
异步 I/O 缓冲区抽象
异步操作取消槽
异步流抽象基类
void async_read(io_context &ctx, mutable_buffers &bufs, function< void(error_code, size_t)> handler)
异步读取—scatter-gather
void async_read(io_context &ctx, dynamic_buffer &buf, size_t n, function< void(error_code, size_t)> handler)
异步读取到 dynamic_buffer
auto async_write(io_context &ctx, memory_view< const char > buffer, use_awaitable_t)
异步写入—use_awaitable
virtual ~async_stream()=default
析构函数
void async_write(io_context &ctx, memory_view< const char > buffer, Token &&token)
异步写入—任意可调用对象
virtual void async_read(io_context &ctx, memory_view< char > buffer, function< void(error_code, size_t)> handler)=0
异步读取数据
virtual void async_write(io_context &ctx, memory_view< const char > buffer, function< void(error_code, size_t)> handler)=0
异步写入数据
auto async_write(io_context &ctx, memory_view< const char > buffer, use_future_t)
异步写入—use_future
auto async_read(io_context &ctx, memory_view< char > buffer, use_future_t)
异步读取—use_future
virtual void async_write(io_context &ctx, memory_view< const char > buffer, cancellation_slot &slot, function< void(error_code, size_t)> handler)=0
异步写入(带取消槽)
void async_read(io_context &ctx, memory_view< char > buffer, detached_t)
异步读取—detached(即发即忘)
virtual void async_read(io_context &ctx, memory_view< char > buffer, cancellation_slot &slot, function< void(error_code, size_t)> handler)=0
异步读取(带取消槽)
void async_write(io_context &ctx, const_buffers &bufs, function< void(error_code, size_t)> handler)
异步写入—scatter-gather
void async_read(io_context &ctx, memory_view< char > buffer, Token &&token)
异步读取—任意可调用对象
void async_write(io_context &ctx, memory_view< const char > buffer, detached_t)
异步写入—detached(即发即忘)
auto async_read(io_context &ctx, memory_view< char > buffer, use_awaitable_t)
异步读取—use_awaitable
常量缓冲区序列(scatter-gather 写)
自适应扩容的动态缓冲区
mutable_buffers prepare(size_t n)
准备写入区域
void commit(size_t n)
标记已写入的字节数
函数包装器主模板声明
统一异步操作核心
可变缓冲区序列(scatter-gather 读)
constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
constexpr use_awaitable_t use_awaitable
use_awaitable 常量
constexpr use_future_t use_future
use_future 常量
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
统一异步操作核心
完成令牌 trait 主模板
fire-and-forget 完成令牌
协程 awaitable 完成令牌
返回 future<T> 的完成令牌
协程 awaitable 完成令牌