X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/becf6dfe4fe2ecd43792aa53a302c5866483f306..6664a19ff9913571d49a9252e58fddaa9cda7f30:/projects/stargazer/users_impl.h?ds=inline diff --git a/projects/stargazer/users_impl.h b/projects/stargazer/users_impl.h index 424958da..4c586b06 100644 --- a/projects/stargazer/users_impl.h +++ b/projects/stargazer/users_impl.h @@ -25,8 +25,8 @@ $Author: faust $ */ -#ifndef USERS_H -#define USERS_H +#ifndef USERS_IMPL_H +#define USERS_IMPL_H #include @@ -36,96 +36,103 @@ $Author: faust $ #include #include -#include "os_int.h" - -#include "settings.h" -#include "user.h" -#include "tariffs.h" -#include "stg_logger.h" -#include "notifer.h" +#include "stg/os_int.h" +#include "stg/store.h" +#include "stg/users.h" +#include "stg/user.h" +#include "stg/tariffs.h" +#include "stg/logger.h" +#include "stg/notifer.h" +#include "stg/noncopyable.h" #include "actions.h" -#include "noncopyable.h" #include "eventloop.h" +#include "settings_impl.h" +#include "user_impl.h" const int userDeleteDelayTime = 120; -using namespace std; -class USERS; +typedef std::list::iterator user_iter; +typedef std::list::const_iterator const_user_iter; + +class USERS_IMPL; //----------------------------------------------------------------------------- -class PROPERTY_NOTIFER_IP_BEFORE: public PROPERTY_NOTIFIER_BASE -{ +class PROPERTY_NOTIFER_IP_BEFORE: public PROPERTY_NOTIFIER_BASE { public: - PROPERTY_NOTIFER_IP_BEFORE(USERS & us, user_iter u) : users(us), user(u) {}; + PROPERTY_NOTIFER_IP_BEFORE(USERS_IMPL & us, user_iter u) : users(us), user(u) {} void Notify(const uint32_t & oldValue, const uint32_t & newValue); - user_iter GetUser() const { return user; }; + user_iter GetUser() const { return user; } private: - USERS & users; - user_iter user; + USERS_IMPL & users; + user_iter user; }; //----------------------------------------------------------------------------- -class PROPERTY_NOTIFER_IP_AFTER: public PROPERTY_NOTIFIER_BASE -{ +class PROPERTY_NOTIFER_IP_AFTER: public PROPERTY_NOTIFIER_BASE { public: - PROPERTY_NOTIFER_IP_AFTER(USERS & us, user_iter u) : users(us), user(u) {}; + PROPERTY_NOTIFER_IP_AFTER(USERS_IMPL & us, user_iter u) : users(us), user(u) {} void Notify(const uint32_t & oldValue, const uint32_t & newValue); - user_iter GetUser() const { return user; }; + user_iter GetUser() const { return user; } private: - USERS & users; - user_iter user; + USERS_IMPL & users; + user_iter user; }; //----------------------------------------------------------------------------- -struct USER_TO_DEL -{ +struct USER_TO_DEL { USER_TO_DEL() : iter(), delTime(0) -{}; +{} -list::iterator iter; +std::list::iterator iter; time_t delTime; }; //----------------------------------------------------------------------------- -class USERS : private NONCOPYABLE - { +class USERS_IMPL : private NONCOPYABLE, public USERS { friend class PROPERTY_NOTIFER_IP_BEFORE; friend class PROPERTY_NOTIFER_IP_AFTER; public: - USERS(SETTINGS * s, BASE_STORE * store, TARIFFS * tariffs, const ADMIN & sysAdmin); - ~USERS(); + USERS_IMPL(SETTINGS_IMPL * s, STORE * store, TARIFFS * tariffs, const ADMIN * sysAdmin); + virtual ~USERS_IMPL(); - int FindByName(const string & login, user_iter * user) const; - int FindByID(int id, user_iter * user); + int FindByName(const std::string & login, USER_PTR * user); - bool TariffInUse(const string & tariffName); + bool TariffInUse(const std::string & tariffName) const; - void AddNotifierUserAdd(NOTIFIER_BASE *); - void DelNotifierUserAdd(NOTIFIER_BASE *); + void AddNotifierUserAdd(NOTIFIER_BASE *); + void DelNotifierUserAdd(NOTIFIER_BASE *); - void AddNotifierUserDel(NOTIFIER_BASE *); - void DelNotifierUserDel(NOTIFIER_BASE *); + void AddNotifierUserDel(NOTIFIER_BASE *); + void DelNotifierUserDel(NOTIFIER_BASE *); - int Add(const string & login, const ADMIN & admin); - void Del(const string & login, const ADMIN & admin); + void AddNotifierUserAdd(NOTIFIER_BASE *); + void DelNotifierUserAdd(NOTIFIER_BASE *); + + void AddNotifierUserDel(NOTIFIER_BASE *); + void DelNotifierUserDel(NOTIFIER_BASE *); + + int Add(const std::string & login, const ADMIN * admin); + void Del(const std::string & login, const ADMIN * admin); int ReadUsers(); - int GetUserNum(); + size_t Count() const { return users.size(); } - int FindByIPIdx(uint32_t ip, user_iter * user); + int FindByIPIdx(uint32_t ip, USER_PTR * user) const; + int FindByIPIdx(uint32_t ip, USER_IMPL ** user) const; + bool IsIPInIndex(uint32_t ip) const; int OpenSearch(); - int SearchNext(int handler, user_iter * u); + int SearchNext(int handler, USER_PTR * user); + int SearchNext(int handler, USER_IMPL ** user); int CloseSearch(int handler); int Start(); int Stop(); private: - void AddToIPIdx(user_iter); + void AddToIPIdx(user_iter user); void DelFromIPIdx(uint32_t ip); - int FindByNameNonLock(const string & login, user_iter * user) const; - int FindByIDNonLock(int id, user_iter * user); + int FindByNameNonLock(const std::string & login, user_iter * user); void RealDelUser(); void ProcessActions(); @@ -143,18 +150,18 @@ private: bool TimeToWriteDetailStat(const struct tm & t); - list users; - list usersToDelete; - list userIPNotifiersBefore; - list userIPNotifiersAfter; + std::list users; + std::list usersToDelete; + std::list userIPNotifiersBefore; + std::list userIPNotifiersAfter; - map ipIndex; - map loginIndex; + std::map ipIndex; + std::map loginIndex; - SETTINGS * settings; + SETTINGS_IMPL * settings; TARIFFS * tariffs; - BASE_STORE * store; - const ADMIN sysAdmin; + STORE * store; + const ADMIN * sysAdmin; STG_LOGGER & WriteServLog; bool nonstop; @@ -164,11 +171,13 @@ private: pthread_t thread; mutable unsigned int handle; - mutable map searchDescriptors; + mutable std::map searchDescriptors; - set *> onAddNotifiers; - set *> onDelNotifiers; - }; + std::set*> onAddNotifiers; + std::set*> onDelNotifiers; + std::set*> onAddNotifiersImpl; + std::set*> onDelNotifiersImpl; +}; //----------------------------------------------------------------------------- inline void PROPERTY_NOTIFER_IP_BEFORE::Notify(const uint32_t & oldValue, @@ -195,4 +204,3 @@ users.AddToIPIdx(user); } //----------------------------------------------------------------------------- #endif -