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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user