blob: 53cf16de14f0abc0db310aae4093bb54b98271f2 (
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
|
#include <asio.hpp>
#include <asio/experimental/awaitable_operators.hpp>
#include <stdio.h>
import ttwhy;
import ttwhy.routers;
auto app(int in, int out, int error) -> asio::awaitable<void>
{
using namespace asio::experimental::awaitable_operators;
auto terminal_attributes = ttwhy::scoped_attributes{fileno(stdin)} //
.canonical_mode(false)
.echo(false);
auto executor = co_await asio::this_coro::executor;
auto input_stream = asio::posix::stream_descriptor{executor, in};
auto output_stream = asio::posix::stream_descriptor{executor, out};
auto error_stream = asio::posix::stream_descriptor{executor, error};
auto router = ttwhy::routers::echo{input_stream};
co_await (ttwhy::io::handle_signals(error_stream, terminal_attributes) ||
ttwhy::io::read_events(input_stream, router));
}
auto main() -> int
{
auto context = asio::io_context{};
asio::co_spawn(context, app(::fileno(::stdin), ::fileno(::stdout), ::fileno(::stderr)), asio::detached);
context.run();
}
|