X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/085c36723242f7bd1e0fd9bf49b950da6cb96039..0c097ef3435d2a45c1ee4ac80f8bd3f254fb8df5:/libs/pinger/include/stg/pinger.h diff --git a/libs/pinger/include/stg/pinger.h b/libs/pinger/include/stg/pinger.h index b726a751..d3b7a99c 100644 --- a/libs/pinger/include/stg/pinger.h +++ b/libs/pinger/include/stg/pinger.h @@ -7,8 +7,12 @@ #pragma once #include -#include #include +#include +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wshadow" +#include +#pragma GCC diagnostic pop #include #include @@ -82,50 +86,43 @@ struct PING_MESSAGE class STG_PINGER { public: - typedef std::multimap PingIPs; - typedef PingIPs::size_type SizeType; + using PingIPs = std::multimap; - explicit STG_PINGER(time_t delay = 15); - ~STG_PINGER(); + explicit STG_PINGER(unsigned delay = 15); - int Start(); - int Stop(); + bool Start(); + bool Stop(); void AddIP(uint32_t ip); void DelIP(uint32_t ip); - SizeType GetPingIPNum() const { return m_pingIP.size(); } + auto GetPingIPNum() const { std::lock_guard lock(m_mutex); return m_pingIPs.size(); } void PrintAllIP(); - int GetIPTime(uint32_t ip, time_t * t) const; - void SetDelayTime(time_t d) { m_delay = d; } - time_t GetDelayTime() const { return m_delay; } - const std::string & GetStrError() const { return m_errorStr; } + bool GetIPTime(uint32_t ip, time_t& t) const; + void SetDelayTime(unsigned d) { m_delay = d; } + unsigned GetDelayTime() const { return m_delay; } + const std::string& GetStrError() const { return m_errorStr; } private: - uint16_t PingCheckSum(void * data, int len); - int SendPing(uint32_t ip); + uint16_t PingCheckSum(const void* data, int len); + bool SendPing(uint32_t ip); uint32_t RecvPing(); - void RealAddIP(); - void RealDelIP(); - static void * RunSendPing(void * d); - static void * RunRecvPing(void * d); + void RunSendPing(std::stop_token token); + void RunRecvPing(std::stop_token token); - time_t m_delay; - bool m_nonstop; + mutable std::mutex m_mutex; + + unsigned m_delay; bool m_isRunningRecver; bool m_isRunningSender; int m_sendSocket; int m_recvSocket; - pthread_t m_sendThread; - pthread_t m_recvThread; + std::jthread m_sendThread; + std::jthread m_recvThread; PING_MESSAGE m_pmSend; uint32_t m_pid; std::string m_errorStr; - std::multimap m_pingIP; - std::list m_ipToAdd; - std::list m_ipToDel; - - mutable pthread_mutex_t m_mutex; + PingIPs m_pingIPs; };