aboutsummaryrefslogtreecommitdiff
path: root/ttwhy/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ttwhy/main.cpp')
-rw-r--r--ttwhy/main.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/ttwhy/main.cpp b/ttwhy/main.cpp
index 32324c0..c210bee 100644
--- a/ttwhy/main.cpp
+++ b/ttwhy/main.cpp
@@ -1,15 +1,35 @@
-#include <asio/io_context.hpp>
-
+#include <asio.hpp>
#include <stdio.h>
import ttwhy;
+auto handle_signals(asio::cancellation_signal & cancellation_signal) -> asio::awaitable<void>
+{
+ co_await asio::this_coro::reset_cancellation_state(asio::disable_cancellation());
+ co_await asio::this_coro::throw_if_cancelled(false);
+
+ auto executor = co_await asio::this_coro::executor;
+ auto signals = asio::signal_set{executor, SIGINT, SIGTERM};
+ auto log_stream = asio::posix::stream_descriptor{executor, fileno(stdout)};
+
+ auto [error, signal] = co_await signals.async_wait(asio::as_tuple(asio::use_awaitable));
+
+ if (!error)
+ {
+ co_await asio::async_write(log_stream, asio::buffer("shutting down...\n"), asio::as_tuple(asio::use_awaitable));
+ cancellation_signal.emit(asio::cancellation_type::all);
+ }
+}
+
auto main() -> int
{
auto terminal_attributes = ttwhy::scoped_attributes{fileno(stdin)} //
.canonical_mode(false)
.echo(false);
-
auto context = asio::io_context{};
+ auto cancellation_signal = asio::cancellation_signal{};
+
+ asio::co_spawn(context, handle_signals(cancellation_signal), asio::detached);
+
context.run();
}