X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/4271ab433cd55bbd2612292bcf39e4dc3d7274f1..0907aa4037b12b6b88ee24495d4577a064d4f8db:/projects/stargazer/plugins/other/ping/ping.h diff --git a/projects/stargazer/plugins/other/ping/ping.h b/projects/stargazer/plugins/other/ping/ping.h new file mode 100644 index 00000000..9986be39 --- /dev/null +++ b/projects/stargazer/plugins/other/ping/ping.h @@ -0,0 +1,142 @@ +#pragma once + +#include "stg/plugin.h" +#include "stg/module_settings.h" +#include "stg/notifer.h" +#include "stg/user_ips.h" +#include "stg/pinger.h" +#include "stg/users.h" +#include "stg/logger.h" + +#include +#include +#include + +#include + +class PING; + +namespace STG +{ +struct USER; +struct SETTINGS; +} + +using UserPtr = STG::User*; +//-----------------------------------------------------------------------------*/ +class CHG_CURRIP_NOTIFIER_PING: public STG::PropertyNotifierBase { +public: + CHG_CURRIP_NOTIFIER_PING(const PING & p, UserPtr u) + : user(u), ping(p) {} + void Notify(const uint32_t & oldIP, const uint32_t & newIP); + UserPtr GetUser() const { return user; } + +private: + CHG_CURRIP_NOTIFIER_PING & operator=(const CHG_CURRIP_NOTIFIER_PING &); + + UserPtr user; + const PING & ping; +}; +//----------------------------------------------------------------------------- +class CHG_IPS_NOTIFIER_PING: public STG::PropertyNotifierBase { +public: + CHG_IPS_NOTIFIER_PING(const PING & p, UserPtr u) + : user(u), ping(p) {} + void Notify(const STG::UserIPs & oldIPS, const STG::UserIPs & newIPS); + UserPtr GetUser() const { return user; } + +private: + CHG_IPS_NOTIFIER_PING & operator=(const CHG_IPS_NOTIFIER_PING &); + + UserPtr user; + const PING & ping; +}; +//----------------------------------------------------------------------------- +class ADD_USER_NONIFIER_PING: public STG::NotifierBase { +public: + explicit ADD_USER_NONIFIER_PING(PING & p) : ping(p) {} + void Notify(const UserPtr & user); + +private: + ADD_USER_NONIFIER_PING(const ADD_USER_NONIFIER_PING &); + ADD_USER_NONIFIER_PING & operator=(const ADD_USER_NONIFIER_PING &); + + PING & ping; +}; +//----------------------------------------------------------------------------- +class DEL_USER_NONIFIER_PING: public STG::NotifierBase { +public: + explicit DEL_USER_NONIFIER_PING(PING & p) : ping(p) {} + void Notify(const UserPtr & user); + +private: + DEL_USER_NONIFIER_PING(const DEL_USER_NONIFIER_PING &); + DEL_USER_NONIFIER_PING & operator=(const DEL_USER_NONIFIER_PING &); + + PING & ping; +}; +//----------------------------------------------------------------------------- +class PING_SETTINGS { +public: + PING_SETTINGS() : pingDelay(0) {} + const std::string & GetStrError() const { return errorStr; } + int ParseSettings(const STG::ModuleSettings & s); + int GetPingDelay() const { return pingDelay; } +private: + int pingDelay; + mutable std::string errorStr; +}; +//----------------------------------------------------------------------------- +class PING : public STG::Plugin { +friend class CHG_CURRIP_NOTIFIER_PING; +friend class CHG_IPS_NOTIFIER_PING; +public: + PING(); + ~PING() override; + + void SetUsers(STG::Users * u) override { users = u; } + void SetSettings(const STG::ModuleSettings & s) override { settings = s; } + int ParseSettings() override; + + int Start() override; + int Stop() override; + int Reload(const STG::ModuleSettings & /*ms*/) override { return 0; } + bool IsRunning() override; + + const std::string & GetStrError() const override { return errorStr; } + std::string GetVersion() const override { return "Pinger v.1.01"; } + uint16_t GetStartPosition() const override { return 10; } + uint16_t GetStopPosition() const override { return 10; } + + void AddUser(UserPtr u); + void DelUser(UserPtr u); + +private: + explicit PING(const PING & rvalue); + PING & operator=(const PING & rvalue); + + void GetUsers(); + void SetUserNotifiers(UserPtr u); + void UnSetUserNotifiers(UserPtr u); + static void * Run(void * d); + + mutable std::string errorStr; + PING_SETTINGS pingSettings; + STG::ModuleSettings settings; + STG::Users * users; + std::list usersList; + + pthread_t thread; + pthread_mutex_t mutex; + bool nonstop; + bool isRunning; + mutable STG_PINGER pinger; + + std::list ChgCurrIPNotifierList; + std::list ChgIPNotifierList; + + ADD_USER_NONIFIER_PING onAddUserNotifier; + DEL_USER_NONIFIER_PING onDelUserNotifier; + + STG::PluginLogger logger; +};