#include <list>
#include <map>
#include <string>
+#include <mutex>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+#include <jthread.hpp>
+#pragma GCC diagnostic pop
#include <cstdint>
-#include <pthread.h>
-
#define PROTOMAX (5)
namespace STG
traffCnt(rvalue.traffCnt),
user(rvalue.user)
{}
- void Notify(const uint32_t & oldValue, const uint32_t & newValue);
+ void notify(const uint32_t & oldValue, const uint32_t & newValue) override;
void SetUser(UserImpl * u) { user = u; }
UserImpl * GetUser() const { return user; }
traffCnt(rvalue.traffCnt),
user(rvalue.user)
{}
- void Notify(const uint32_t & oldValue, const uint32_t & newValue);
+ void notify(const uint32_t & oldValue, const uint32_t & newValue) override;
void SetUser(UserImpl * u) { user = u; }
UserImpl * GetUser() const { return user; }
private:
traffCnt(t)
{}
virtual ~ADD_USER_NONIFIER() {}
- void Notify(const UserImplPtr & user);
+ void notify(const UserImplPtr & user) override;
private:
ADD_USER_NONIFIER(const ADD_USER_NONIFIER & rvalue);
traffCnt(t)
{}
virtual ~DEL_USER_NONIFIER() {}
- void Notify(const UserImplPtr & user);
+ void notify(const UserImplPtr & user) override;
private:
DEL_USER_NONIFIER(const DEL_USER_NONIFIER & rvalue);
void FreeRules();
bool ReadRules(bool test = false);
- static void * Run(void * data);
+ void Run(std::stop_token token);
void DeterminateDir(const RawPacket & packet,
int * dirU, // Direction for upload
UsersImpl * users;
- bool running;
bool stopped;
- pthread_mutex_t mutex;
- pthread_t thread;
+ std::mutex m_mutex;
+ std::jthread m_thread;
std::list<TRF_IP_BEFORE> ipBeforeNotifiers;
std::list<TRF_IP_AFTER> ipAfterNotifiers;
};
//-----------------------------------------------------------------------------
inline
-void TRF_IP_BEFORE::Notify(const uint32_t & oldValue, const uint32_t &)
+void TRF_IP_BEFORE::notify(const uint32_t & oldValue, const uint32_t &)
{
// User changes his address. Remove old IP
if (!oldValue)
return;
-EVENT_LOOP_SINGLETON::GetInstance().Enqueue(traffCnt, &TraffCounterImpl::DelUser, oldValue);
+EVENT_LOOP::instance().Enqueue(traffCnt, &TraffCounterImpl::DelUser, oldValue);
}
//-----------------------------------------------------------------------------
inline
-void TRF_IP_AFTER::Notify(const uint32_t &, const uint32_t & newValue)
+void TRF_IP_AFTER::notify(const uint32_t &, const uint32_t & newValue)
{
// User changes his address. Add new IP
if (!newValue)
return;
-EVENT_LOOP_SINGLETON::GetInstance().Enqueue(traffCnt, &TraffCounterImpl::AddUser, user);
+EVENT_LOOP::instance().Enqueue(traffCnt, &TraffCounterImpl::AddUser, user);
}
//-----------------------------------------------------------------------------
inline
-void ADD_USER_NONIFIER::Notify(const UserImplPtr & user)
+void ADD_USER_NONIFIER::notify(const UserImplPtr & user)
{
-EVENT_LOOP_SINGLETON::GetInstance().Enqueue(traffCnt, &TraffCounterImpl::SetUserNotifiers, user);
+EVENT_LOOP::instance().Enqueue(traffCnt, &TraffCounterImpl::SetUserNotifiers, user);
}
//-----------------------------------------------------------------------------
inline
-void DEL_USER_NONIFIER::Notify(const UserImplPtr & user)
+void DEL_USER_NONIFIER::notify(const UserImplPtr & user)
{
-EVENT_LOOP_SINGLETON::GetInstance().Enqueue(traffCnt, &TraffCounterImpl::UnSetUserNotifiers, user);
-EVENT_LOOP_SINGLETON::GetInstance().Enqueue(traffCnt, &TraffCounterImpl::DelUser, user->GetCurrIP());
+EVENT_LOOP::instance().Enqueue(traffCnt, &TraffCounterImpl::UnSetUserNotifiers, user);
+EVENT_LOOP::instance().Enqueue(traffCnt, &TraffCounterImpl::DelUser, user->GetCurrIP());
}
//-----------------------------------------------------------------------------
}