aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/echo.cpp36
1 files changed, 36 insertions, 0 deletions
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 <asio.hpp>
+#include <asio/experimental/awaitable_operators.hpp>
+
+#include <stdio.h>
+
+import ttwhy.io;
+import ttwhy.routers;
+
+auto app(int in, int out, int error) -> asio::awaitable<void>
+{
+ 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();
+}