#include "stg/plugin.h"
#include "stg/module_settings.h"
#include "stg/notifer.h"
+#include "stg/subscriptions.h"
#include "stg/user_ips.h"
#include "stg/pinger.h"
#include "stg/users.h"
#include <string>
#include <list>
+#include <mutex>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+#include <jthread.hpp>
+#pragma GCC diagnostic pop
#include <cstdint>
-#include <pthread.h>
-
class PING;
namespace STG
public:
CHG_CURRIP_NOTIFIER_PING(const PING & p, UserPtr u)
: user(u), ping(p) {}
- void Notify(const uint32_t & oldIP, const uint32_t & newIP);
+ void notify(const uint32_t & oldIP, const uint32_t & newIP) override;
UserPtr GetUser() const { return user; }
private:
public:
CHG_IPS_NOTIFIER_PING(const PING & p, UserPtr u)
: user(u), ping(p) {}
- void Notify(const STG::UserIPs & oldIPS, const STG::UserIPs & newIPS);
+ void notify(const STG::UserIPs & oldIPS, const STG::UserIPs & newIPS) override;
UserPtr GetUser() const { return user; }
private:
const PING & ping;
};
//-----------------------------------------------------------------------------
-class ADD_USER_NONIFIER_PING: public STG::NotifierBase<UserPtr> {
-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<UserPtr> {
-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) {}
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; }
void GetUsers();
void SetUserNotifiers(UserPtr u);
void UnSetUserNotifiers(UserPtr u);
- static void * Run(void * d);
+ void Run(std::stop_token token);
mutable std::string errorStr;
PING_SETTINGS pingSettings;
STG::Users * users;
std::list<UserPtr> usersList;
- pthread_t thread;
- pthread_mutex_t mutex;
- bool nonstop;
+ std::jthread m_thread;
+ std::mutex m_mutex;
bool isRunning;
mutable STG_PINGER pinger;
std::list<CHG_CURRIP_NOTIFIER_PING> ChgCurrIPNotifierList;
std::list<CHG_IPS_NOTIFIER_PING> ChgIPNotifierList;
- ADD_USER_NONIFIER_PING onAddUserNotifier;
- DEL_USER_NONIFIER_PING onDelUserNotifier;
+ STG::ScopedConnection m_onAddUserConn;
+ STG::ScopedConnection m_onDelUserConn;
STG::PluginLogger logger;
};