This commit is contained in:
2024-10-22 18:35:53 +03:00
parent 0e937bb2d7
commit addd13d826
2 changed files with 205 additions and 43 deletions

View File

@@ -5,6 +5,7 @@
#include <asio/ip/udp.hpp>
#include <asio/local/seq_packet_protocol.hpp>
#include <asio/local/stream_protocol.hpp>
#include <asio/signal_set.hpp>
#include "../adc_device_netserver.h"
#include "../adc_endpoint.h"
@@ -67,9 +68,36 @@ public:
// some default endpoint?!!
void start() {}
template <std::ranges::range RST, std::ranges::range RRT>
void setupSignals(const RST& stop_sig_num = std::vector<int>{SIGINT, SIGTERM},
const RRT& restart_sig_num = std::vector<int>{SIGUSR1})
requires(std::convertible_to<std::ranges::range_value_t<RST>, int> &&
std::convertible_to<std::ranges::range_value_t<RRT>, int>)
{
for (const int sig : stop_sig_num) {
_stopSignal.add(sig);
}
_stopSignal.async_wait([this](std::error_code ec, int signo) {
signalReceived(ec, signo);
this->stopAllSessions();
});
for (const int sig : restart_sig_num) {
_restartSignal.add(sig);
}
_restartSignal.async_wait([this](std::error_code ec, int signo) {
signalReceived(ec, signo);
// ?!!!!!!!
});
}
protected:
asio::io_context& _ioContext;
asio::signal_set _stopSignal, _restartSignal;
// demonizing ASIO-related methods
virtual void daemonizePrepare()
{
@@ -80,6 +108,8 @@ protected:
{
_ioContext.notify_fork(asio::io_context::fork_child);
}
virtual void signalReceived(std::error_code, int signo) {};
};
} // namespace adc::impl