aboutsummaryrefslogtreecommitdiff
path: root/ttwhy/io/signal_handling.cppm
diff options
context:
space:
mode:
Diffstat (limited to 'ttwhy/io/signal_handling.cppm')
-rw-r--r--ttwhy/io/signal_handling.cppm58
1 files changed, 0 insertions, 58 deletions
diff --git a/ttwhy/io/signal_handling.cppm b/ttwhy/io/signal_handling.cppm
deleted file mode 100644
index 1f3fecc..0000000
--- a/ttwhy/io/signal_handling.cppm
+++ /dev/null
@@ -1,58 +0,0 @@
-module;
-
-#include <asio.hpp>
-
-#include <csignal>
-#include <format>
-#include <system_error>
-
-export module ttwhy.io:signal_handling;
-
-namespace ttwhy::io
-{
-
- export template<typename Stream, typename TerminalAttributes>
- auto handle_signals(Stream & stream, TerminalAttributes & attributes) -> asio::awaitable<std::error_code>
- {
- auto executor = co_await asio::this_coro::executor;
- auto signals = asio::signal_set{executor, SIGINT, SIGTERM};
- signals.add(SIGTSTP);
- signals.add(SIGCONT);
-
- while (true)
- {
- auto [error, signal] = co_await signals.async_wait(asio::as_tuple(asio::use_awaitable));
- if (error)
- {
- co_return error;
- }
-
- switch (signal)
- {
- case SIGINT:
- case SIGTERM:
- {
- auto message = std::format("Received signal {}, exiting ...\n", signal);
- co_await asio::async_write(stream, asio::buffer(message), asio::use_awaitable);
- co_return asio::error_code{};
- }
- case SIGTSTP:
- {
- attributes.canonical_mode(true).echo(true);
- ::raise(SIGSTOP);
- break;
- }
- case SIGCONT:
- {
- attributes.canonical_mode(false).echo(false);
- break;
- }
- }
-
- if (!error)
- {
- }
- }
- }
-
-} // namespace ttwhy::io