From 676586f2034ff112b309dccc430893d73e919191 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 22 Sep 2026 18:06:51 +0200 Subject: apps: extract applications --- apps/echo.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 apps/echo.cpp (limited to 'apps') diff --git a/apps/echo.cpp b/apps/echo.cpp new file mode 100644 index 0000000..ab635a7 --- /dev/null +++ b/apps/echo.cpp @@ -0,0 +1,36 @@ +#include +#include + +#include + +import ttwhy.io; +import ttwhy.routers; + +auto app(int in, int out, int error) -> asio::awaitable +{ + using namespace asio::experimental::awaitable_operators; + + auto terminal_attributes = ttwhy::io::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{output_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(); +} -- cgit v1.2.3