...
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user