123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- // remvar.h :
- //
- #if !defined(AGD_REMVAR_H__B91C5ED5_B980_4B06_9CEA_886DB0518B29__INCLUDED_)
- #define AGD_REMVAR_H__B91C5ED5_B980_4B06_9CEA_886DB0518B29__INCLUDED_
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <string>
- #include <pthread.h>
- #include <typeinfo>
- #include <vector>
- #include <map>
- #include <gfa/gfaipc.h>
- #ifdef SITARA_BUILD
- #include <json/json.h>
- #else // SITARA_BUILD
- #include <jsoncpp/json/json.h>
- #endif // SITARA_BUILD
- #ifndef _LIBBUILD
- #include <gfa/svc/common/logfile.h>
- #include <gfa/svc/common/debug.h>
- #include <gfa/svc/remanent/remlogger.h>
- #else // _LIBBUILD
- #include "common/logfile.h"
- #include "common/debug.h"
- #include "remlogger.h"
- #endif // _LIBBUILD
- /////////////////////////////////////////////////////////////////////////////
- #define _XML_SPACES_PER_TAB 4
- #define _JSON_SPACES_PER_TAB 4
- #define _TRACK_TYPES_AT_LOAD 0
- #define _TRACK_REM_WRITES 0
- #define _IMPLEMENT_XML 0
- /////////////////////////////////////////////////////////////////////////////
- typedef union _CHECK_UPDATE_SHM_RETVAL
- {
- struct
- {
- unsigned int nChecked;
- unsigned int nUpdated;
- };
- unsigned long long nRetval;
- }CHECK_UPDATE_SHM_RETVAL, *LPCHECK_UPDATE_SHM_RETVAL;
- typedef const CHECK_UPDATE_SHM_RETVAL *LPCCHECK_UPDATE_SHM_RETVAL;
- /////////////////////////////////////////////////////////////////////////////
- // remvar.h - Declarations:
- class CRemVarTable;
- class CRemanent
- {
- public:
- virtual void CreateMembersTable(CRemVarTable &vt) = 0;
- virtual bool SaveJSON(FILE *f, int nIndent, bool bValueOnly, bool bWriteComma) = 0;
- virtual bool SetJSONValue(const Json::Value &jv, bool fLock){
- UNUSED(jv);
- UNUSED(fLock);
- return false;}
- virtual bool SetDoubleValue(double val, bool fLock){
- UNUSED(val);
- UNUSED(fLock);
- return false;}
- virtual unsigned long long CheckUpdateShm(bool fLock) = 0;
- virtual void InitPath(CRemanent *pParent, const char *pszMemberName) = 0;
- virtual const char* GetPath(void) const = 0;
- virtual unsigned long long GetUpdateCount(void) const = 0;
- virtual void Log(time_t ts, CRemLogger &rlogger) = 0;
- };
- /////////////////////////////////////////////////////////////////////////////
- class CRemVarTable
- {
- public:
- typedef bool (*_PFNCMP)(const char*, const char*);
- public:
- CRemVarTable(void);
- virtual ~CRemVarTable(void);
- void AddVar(CRemanent *pv);
- CRemanent* Find(const char *key) const;
- unsigned long LoadJSONValues(const Json::Value &jv);
- bool GetMaxUpdateVariables(std::vector<const CRemanent*> &vars, size_t nMaxVars);
- private:
- void ParseJsonMember(const Json::Value &rMem, std::string &sname, unsigned long &parsed);
- void ParseJsonScalar(const Json::Value &rScl, std::string &sname, unsigned long &parsed);
- void ParseJsonArray(const Json::Value &rArr, std::string &sname, unsigned long &parsed);
- void ParseJsonObject(const Json::Value &rObj, std::string &sname, unsigned long &parsed);
- private:
- std::map<const char*, CRemanent*, _PFNCMP> m_map;
- };
- /////////////////////////////////////////////////////////////////////////////
- class CDbPersist
- {
- public:
- typedef bool (*_PFNCMP)(const std::string&, const std::string&);
- typedef std::map<std::string, std::string, _PFNCMP> CFieldMap;
- typedef std::vector<CFieldMap> CTagsMap;
- public:
- CDbPersist(const char *pszDatabaseName, const char *pszTagsTableName, const char *pszLogsTableName, const char *pszDbUser, const char *pszDbPass);
- virtual ~CDbPersist(void);
- int RestoreValues(const CRemVarTable &map, CLogfile &rlf);
- const CTagsMap &GetTagsMap(void) const {
- return m_tags;}
- private:
- bool Init(CMySqlDB &db);
- private:
- std::string m_sDatabaseName;
- std::string m_sTagsTableName;
- std::string m_sLogsTableName;
- std::string m_sUser;
- std::string m_sPass;
- CTagsMap m_tags;
- std::string m_lastError;
- };
- /////////////////////////////////////////////////////////////////////////////
- class CRemVariable : public CRemanent
- {
- public:
- enum VT
- {
- VT_Invalid,
- VT_bool,
- VT_I1,
- VT_UI1,
- VT_I2,
- VT_UI2,
- VT_I4,
- VT_UI4,
- VT_I8,
- VT_UI8,
- VT_float,
- VT_double,
- VT_string
- };
- typedef union
- {
- void *pVoid;
- bool *pBool;
- signed char *pI1;
- unsigned char *pUI1;
- signed short *pI2;
- unsigned short *pUI2;
- signed int *pI4;
- unsigned int *pUI4;
- signed long long *pI8;
- unsigned long long *pUI8;
- float *pFloat;
- double *pDouble;
- }V_Ptr;
- typedef union
- {
- bool boolVal;
- signed char I1Val;
- unsigned char UI1Val;
- signed short I2Val;
- unsigned short UI2Val;
- signed int I4Val;
- unsigned int UI4Val;
- signed long long I8Val;
- unsigned long long UI8Val;
- float FloatVal;
- double DoubleVal;
- }V_Val;
- public:
- CRemVariable(void *pData, const std::type_info &rti, HSHM hShm, bool bIsDbPersitent, const char *pszName, int nIndex, CRemanent *pParent);
- virtual ~CRemVariable(void);
- virtual void CreateMembersTable(CRemVarTable &vt);
- virtual bool SaveJSON(FILE *f, int nIndent, bool bValueOnly, bool bWriteComma);
- virtual bool SetJSONValue(const Json::Value &jv, bool fLock);
- virtual bool SetDoubleValue(double val, bool fLock);
- virtual unsigned long long CheckUpdateShm(bool fLock);
- virtual void InitPath(CRemanent*pParent, const char *pszMemberName);
- virtual const char* GetPath(void) const {
- return m_pszPath;}
- virtual unsigned long long GetUpdateCount(void) const {
- return m_nUpdates;}
- virtual void Log(time_t ts, CRemLogger &rlogger);
- private:
- void Lock(void);
- void Unlock(void);
- private:
- std::string m_name;
- std::string m_path;
- const char *m_pszPath;
- int m_nIndex;
- enum VT m_vt;
- volatile V_Ptr m_data;
- V_Val m_cache;
- HSHM m_hShm;
- CRemanent *m_pParent;
- unsigned long long m_nUpdates;
- double m_fLogValue;
- bool m_bMustLog;
- bool m_bIsDbPersitent;
- size_t m_nCbVarpath;
- };
- /////////////////////////////////////////////////////////////////////////////
- class CRemStringVariable : public CRemanent
- {
- public:
- typedef enum
- {
- VT_Invalid, // 0
- VT_Latin1, // 1
- VT_UTF_8, // 2
- VT_UTF_16, // 3
- VT_UTF_32, // 4
- VT_Unicode, // 5
- VT_Last
- }VT;
- typedef union
- {
- void *pVoid;
- char *pszMbs;
- char16_t *pszWc16;
- char32_t *pszWc32;
- wchar_t *pszWcs;
- }V_Ptr;
- public:
- CRemStringVariable(void *pData, size_t nCChData, VT vt, const std::type_info &rti, HSHM hShm, bool bIsDbPersitent, const char *pszName, int nIndex, CRemanent *pParent);
- virtual ~CRemStringVariable(void);
- virtual void CreateMembersTable(CRemVarTable &vt);
- virtual bool SaveJSON(FILE *f, int nIndent, bool bValueOnly, bool bWriteComma);
- virtual bool SetJSONValue(const Json::Value &jv, bool fLock);
- virtual unsigned long long CheckUpdateShm(bool fLock);
- virtual void InitPath(CRemanent*pParent, const char *pszMemberName);
- virtual const char* GetPath(void) const {
- return m_pszPath;}
- virtual unsigned long long GetUpdateCount(void) const {
- return m_nUpdates;}
- virtual void Log(time_t ts, CRemLogger &rlogger);
- private:
- bool shmChanged(bool fLock);
- void Lock(void);
- void Unlock(void);
- void zeroTerm(volatile V_Ptr &rp, size_t at);
- private:
- std::string m_name;
- std::string m_path;
- const char *m_pszPath;
- int m_nIndex;
- VT m_vt;
- volatile V_Ptr m_data;
- V_Ptr m_cache;
- size_t m_nCbBuffer;
- size_t m_nCbString;
- HSHM m_hShm;
- CRemanent *m_pParent;
- unsigned long long m_nUpdates;
- bool m_bMustLog;
- bool m_bIsDbPersitent;
- size_t m_nCbVarpath;
- char m_szLog[_RL_MAX_STRVAL_LENGTH];
- size_t m_nCbLog;
- };
- /////////////////////////////////////////////////////////////////////////////
- class CRemBitVariable : public CRemanent
- {
- public:
- enum VT
- {
- VT_Invalid,
- VT_bool,
- VT_I1,
- VT_UI1,
- VT_I2,
- VT_UI2,
- VT_I4,
- VT_UI4,
- VT_I8,
- VT_UI8,
- VT_float,
- VT_double,
- VT_string
- };
- public:
- CRemBitVariable(void *pData, size_t nOffset, int nBitNr, HSHM hShm, bool bIsDbPersitent, const char *pszName, CRemanent *pParent);
- virtual ~CRemBitVariable(void);
- virtual void CreateMembersTable(CRemVarTable &vt);
- virtual bool SaveJSON(FILE *f, int nIndent, bool bValueOnly, bool bWriteComma);
- virtual bool SetJSONValue(const Json::Value &jv, bool fLock);
- virtual bool SetDoubleValue(double val, bool fLock);
- virtual unsigned long long CheckUpdateShm(bool fLock);
- virtual void InitPath(CRemanent*pParent, const char *pszMemberName);
- virtual const char* GetPath(void) const {
- return m_pszPath;}
- virtual unsigned long long GetUpdateCount(void) const {
- return m_nUpdates;}
- virtual void Log(time_t ts, CRemLogger &rlogger);
- private:
- void Lock(void);
- void Unlock(void);
- private:
- std::string m_name;
- std::string m_path;
- const char *m_pszPath;
- uint8_t *m_pShmByte;
- uint8_t m_mask;
- bool m_cacheVal;
- HSHM m_hShm;
- CRemanent *m_pParent;
- unsigned long long m_nUpdates;
- double m_fLogValue;
- bool m_bMustLog;
- bool m_bIsDbPersitent;
- size_t m_nCbVarpath;
- };
- /////////////////////////////////////////////////////////////////////////////
- #endif // !defined(AGD_REMVAR_H__B91C5ED5_B980_4B06_9CEA_886DB0518B29__INCLUDED_)
|