Major Update:

- DataTreeCore:
  - Merge TDataMember and CDataTree into => CDataMember
  - Each node, incl root is now CDataMember object
  - Modified function to not require BaseMember (Object is basemember)
  - Split/duplicat most functions to require, or not require child path
  - Added isNull/Object/Array/Sting() etc methods
  - Many other methods removed or restructured
- Updated DataTree usage in: JSONparseCore,
  ApplicationCore, FunctionCore, SelectableCore, WatchdogCore
This commit is contained in:
Charl Wentzel
2018-11-17 19:10:59 +02:00
parent d36bf3230b
commit f2a1ca950a
10 changed files with 472 additions and 488 deletions

View File

@@ -39,7 +39,7 @@ CApplication::CApplication( EDebugLevel pLogLevel )
LogOutput = OUT_NORMAL;
// Create Configuration
DataTree = new CDataTree();
DataTree = new CDataMember();
JSONparser = new CJSONparse( DataTree );
// Selector
@@ -145,14 +145,14 @@ bool CApplication::SaveConfig()
bool CApplication::LoadConfigData()
{
TDataMember * TempMember;
CDataMember * TempMember;
EDebugLevel pLogLevel;
int pLogOutput;
char * TempStr;
// Get debug level
pLogLevel = dlNone;
TempStr = (char*)DataTree->GetStr( ConfigMember, "Log/Level", "Medium", true );
TempStr = (char*)ConfigMember->GetChildStr( "Log/Level", "Medium", true );
if (TempStr)
{
if (!strcasecmp( TempStr, "Low" ))
@@ -165,32 +165,35 @@ bool CApplication::LoadConfigData()
// Set debug output
pLogOutput = 0;
TempMember = DataTree->GetFirstChild( ConfigMember, "Log/Output", true );
while (TempMember)
if ((TempMember = ConfigMember->GetMember( "Log/Output", true )))
{
if (TempMember->Value)
TempMember = TempMember->GetFirstChild();
while (TempMember)
{
if (!strcasecmp( TempMember->Value, "Normal"))
pLogOutput |= OUT_NORMAL;
else if (!strcasecmp( TempMember->Value, "Bin"))
pLogOutput |= OUT_BIN;
else if (!strcasecmp( TempMember->Value, "Hex"))
pLogOutput |= OUT_HEX;
else if (!strcasecmp( TempMember->Value, "Count"))
pLogOutput |= OUT_COUNT;
else if (!strcasecmp( TempMember->Value, "AsIs"))
pLogOutput |= OUT_ASIS;
else if (!strcasecmp( TempMember->Value, "CRLF"))
pLogOutput |= OUT_CRLF;
}
if ((TempStr = (char*)TempMember->GetStr()))
{
if (!strcasecmp( TempStr, "Normal"))
pLogOutput |= OUT_NORMAL;
else if (!strcasecmp( TempStr, "Bin"))
pLogOutput |= OUT_BIN;
else if (!strcasecmp( TempStr, "Hex"))
pLogOutput |= OUT_HEX;
else if (!strcasecmp( TempStr, "Count"))
pLogOutput |= OUT_COUNT;
else if (!strcasecmp( TempStr, "AsIs"))
pLogOutput |= OUT_ASIS;
else if (!strcasecmp( TempStr, "CRLF"))
pLogOutput |= OUT_CRLF;
}
// Next
TempMember = DataTree->GetNextChild( TempMember );
// Next
TempMember = TempMember->GetNextPeer();
}
}
SetLogParam( pLogLevel, pLogOutput );
// Load Address List
if ((AddressFile = (char*)DataTree->GetStr( ConfigMember, "AddressList/Path", NULL )))
if ((AddressFile = (char*)ConfigMember->GetChildStr( "AddressList/Path", NULL )))
{
if (JSONparser->ReadFromFile( "address", AddressFile )) {
if (Log) Log->Message( dlLow, dlLow, "%s: Address file loaded (%s)", ProcessName, AddressFile );
@@ -201,10 +204,10 @@ bool CApplication::LoadConfigData()
}
// Configure Selector
if ((TempMember = DataTree->GetMember( ConfigMember, "Selector" )))
if ((TempMember = ConfigMember->GetMember( "Selector" )))
{
// Create Selector
Selector = new CSelect( (int)DataTree->GetInt( TempMember, "Wait", 5, true ), LogLevel );
Selector = new CSelect( (int)TempMember->GetChildInt( "Wait", 5, true ), LogLevel );
}
return true;
}
@@ -232,7 +235,7 @@ bool CApplication::Init()
bool CApplication::InitConfig( const char * pConfigPath )
{
// Check if Datatree exists
if (!DataTree || !(ConfigMember = DataTree->GetMember( NULL, pConfigPath ))) {
if (!DataTree || !(ConfigMember = DataTree->GetMember( pConfigPath ))) {
return false;
}
@@ -247,32 +250,32 @@ bool CApplication::InitConfig( const char * pConfigPath )
bool CApplication::InitFunctions( const char * pConfigPath )
{
CFunctionCore * Function;
TDataMember * TempMember;
CDataMember * TempMember;
char * Type;
// Check of path exists
if (!DataTree || !(FunctionConfigMember = DataTree->GetMember( NULL, pConfigPath )))
if (!DataTree || !(FunctionConfigMember = DataTree->GetMember( pConfigPath )))
return false;
// Process each Channel
TempMember = DataTree->GetFirstChild( FunctionConfigMember );
TempMember = FunctionConfigMember->GetFirstChild();
while (TempMember)
{
// Get function parameters
Type = (char*)DataTree->GetStr( TempMember, "Type", "Custom", true );
Type = (char*)TempMember->GetChildStr( "Type", "Custom", true );
// Get or create function
if (!strcasecmp( Type, "WatchdogClient" )) {
Function = new CWatchdogCore( TempMember->Name );
Function = new CWatchdogCore( TempMember->GetName() );
}
else if (!strcasecmp( Type, "Selectable" )) {
Function = new CSelectableCore( TempMember->Name );
Function = new CSelectableCore( TempMember->GetName() );
}
else if (!strcasecmp( Type, "File" )) {
Function = new CFileCore( TempMember->Name );
Function = new CFileCore( TempMember->GetName() );
}
else {
Function = GetFunction( TempMember->Name );
Function = GetFunction( TempMember->GetName() );
}
// Load Function configuration and Initialise
@@ -281,7 +284,7 @@ bool CApplication::InitFunctions( const char * pConfigPath )
}
// Next
TempMember = TempMember->Next;
TempMember = TempMember->GetNextPeer();
}
return true;
@@ -291,10 +294,10 @@ bool CApplication::InitFunctions( const char * pConfigPath )
bool CApplication::InitFunctionLinks( const char * pConfigPath )
{
TFunctionItem * FunctionItem;
TDataMember * TempMember;
CDataMember * TempMember;
// Check of path exists
if (!DataTree || !(LinkConfigMember = DataTree->GetMember( NULL, pConfigPath )))
if (!DataTree || !(LinkConfigMember = DataTree->GetMember( pConfigPath )))
return false;
// Process each Channel
@@ -302,7 +305,7 @@ bool CApplication::InitFunctionLinks( const char * pConfigPath )
while (FunctionItem)
{
// Build links for function
if ((TempMember = DataTree->GetMember( LinkConfigMember, FunctionItem->Function->GetName() )))
if ((TempMember = LinkConfigMember->GetMember( FunctionItem->Function->GetName() )))
FunctionItem->Function->InitChannelLinks( TempMember );
// Next