X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/9701b7ab4dc4cd709ad4dcaa750fc0021f15e231..4e101b93cafd0881518fc2be53c051d47d374d93:/include/stg/user_property.h diff --git a/include/stg/user_property.h b/include/stg/user_property.h index 78e5675a..fbcf8856 100644 --- a/include/stg/user_property.h +++ b/include/stg/user_property.h @@ -15,19 +15,24 @@ $Author: faust $ #include #include +#include "stg/logger.h" +#include "stg/locker.h" +#include "stg/scriptexecuter.h" + #include "store.h" #include "admin.h" #include "notifer.h" -#include "stg_logger.h" -#include "stg_locker.h" -#include "script_executer.h" #include "noncopyable.h" -extern const volatile time_t stgTime; - +extern volatile time_t stgTime; +//----------------------------------------------------------------------------- +class USER_PROPERTY_BASE { +public: + virtual std::string ToString() const = 0; +}; //----------------------------------------------------------------------------- template -class USER_PROPERTY { +class USER_PROPERTY : USER_PROPERTY_BASE { public: USER_PROPERTY(varT & val); virtual ~USER_PROPERTY(); @@ -42,14 +47,15 @@ public: operator const varT&() const throw() { return value; } void AddBeforeNotifier(PROPERTY_NOTIFIER_BASE * n); - void DelBeforeNotifier(PROPERTY_NOTIFIER_BASE * n); + void DelBeforeNotifier(const PROPERTY_NOTIFIER_BASE * n); void AddAfterNotifier(PROPERTY_NOTIFIER_BASE * n); - void DelAfterNotifier(PROPERTY_NOTIFIER_BASE * n); + void DelAfterNotifier(const PROPERTY_NOTIFIER_BASE * n); time_t ModificationTime() const throw() { return modificationTime; } void ModifyTime() throw(); + std::string ToString() const; private: varT & value; time_t modificationTime; @@ -128,6 +134,8 @@ public: void SetProperties(const USER_PROPERTIES & p) { stat = p.stat; conf = p.conf; } + std::string GetPropertyValue(const std::string & name) const; + USER_PROPERTY_LOGGED cash; USER_PROPERTY_LOGGED up; USER_PROPERTY_LOGGED down; @@ -163,6 +171,8 @@ public: USER_PROPERTY_LOGGED userdata7; USER_PROPERTY_LOGGED userdata8; USER_PROPERTY_LOGGED userdata9; + + std::map params; }; //============================================================================= @@ -173,7 +183,10 @@ template inline USER_PROPERTY::USER_PROPERTY(varT & val) : value(val), - modificationTime(stgTime) + modificationTime(stgTime), + beforeNotifiers(), + afterNotifiers(), + mutex() { pthread_mutex_init(&mutex, NULL); } @@ -232,10 +245,10 @@ beforeNotifiers.insert(n); //----------------------------------------------------------------------------- template inline -void USER_PROPERTY::DelBeforeNotifier(PROPERTY_NOTIFIER_BASE * n) +void USER_PROPERTY::DelBeforeNotifier(const PROPERTY_NOTIFIER_BASE * n) { STG_LOCKER locker(&mutex, __FILE__, __LINE__); -beforeNotifiers.erase(n); +beforeNotifiers.erase(const_cast *>(n)); } //----------------------------------------------------------------------------- template @@ -248,10 +261,10 @@ afterNotifiers.insert(n); //----------------------------------------------------------------------------- template inline -void USER_PROPERTY::DelAfterNotifier(PROPERTY_NOTIFIER_BASE * n) +void USER_PROPERTY::DelAfterNotifier(const PROPERTY_NOTIFIER_BASE * n) { STG_LOCKER locker(&mutex, __FILE__, __LINE__); -afterNotifiers.erase(n); +afterNotifiers.erase(const_cast *>(n)); } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -282,8 +295,6 @@ bool USER_PROPERTY_LOGGED::Set(const varT & val, const std::string & msg) { const PRIV * priv = admin->GetPriv(); -std::string adm_login = admin->GetLogin(); -std::string adm_ip = admin->GetIPStr(); if ((priv->userConf && !isStat) || (priv->userStat && isStat) || @@ -293,8 +304,8 @@ if ((priv->userConf && !isStat) || std::stringstream oldVal; std::stringstream newVal; - oldVal.flags(oldVal.flags() | ios::fixed); - newVal.flags(newVal.flags() | ios::fixed); + oldVal.flags(oldVal.flags() | std::ios::fixed); + newVal.flags(newVal.flags() | std::ios::fixed); oldVal << USER_PROPERTY::ConstData(); newVal << val; @@ -363,7 +374,7 @@ std::string filePath = scriptsDir + "/OnChange"; if (access(filePath.c_str(), X_OK) == 0) { std::string execString("\"" + filePath + "\" \"" + login + "\" \"" + paramName + "\" \"" + oldValue + "\" \"" + newValue + "\" \"" + admin->GetLogin() + "\" \"" + admin->GetIPStr() + "\""); - ScriptExec(execString); + ScriptExec(execString.c_str()); } else { @@ -373,12 +384,27 @@ else //------------------------------------------------------------------------- //------------------------------------------------------------------------- //------------------------------------------------------------------------- +std::string USER_PROPERTIES::GetPropertyValue(const std::string & name) const +{ + std::map::iterator it = params.find(name); + if (it != params.end()) return it->second.ToString(); + else return ""; +} +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- template inline -ostream & operator<< (ostream & stream, const USER_PROPERTY & value) +std::ostream & operator<< (std::ostream & stream, const USER_PROPERTY & value) { return stream << value.ConstData(); } //----------------------------------------------------------------------------- - +template +std::string USER_PROPERTY::ToString() const +{ +std::stringstream stream; +stream << value; +return stream.str(); +} #endif // USER_PROPERTY_H