Important update:
- DataTreeCore:
- Renamed Get/SetMemXxx() methods to Get/SetChXxx()
- Renamed GetMember() to GetChild()
- Updated: JSONparse, ApplicationCore, FunctionCore, SelectableCore,
and WatchdogCore
- Remove unused PrevChild & Last vars in GetChild (GetMember)
- JSONparseCore:
- Use return values from write() and PrintXxx() methods to report fail
- SelectableCore:
- Fix possible uninitialised FlowCtrl & Parity value
- DateTimeCore:
- Fix possible memory overrun in temp buffer
- EventBufferCore:
- Fix possible uninitialised value error in AddEvent
This commit is contained in:
@@ -152,7 +152,7 @@ bool CApplication::LoadConfigData()
|
|||||||
|
|
||||||
// Get debug level
|
// Get debug level
|
||||||
pLogLevel = dlNone;
|
pLogLevel = dlNone;
|
||||||
TempStr = (char*)ConfigMember->GetMemStr( "Log/Level", "Medium", true );
|
TempStr = (char*)ConfigMember->GetChStr( "Log/Level", "Medium", true );
|
||||||
if (TempStr)
|
if (TempStr)
|
||||||
{
|
{
|
||||||
if (!strcasecmp( TempStr, "Low" ))
|
if (!strcasecmp( TempStr, "Low" ))
|
||||||
@@ -165,7 +165,7 @@ bool CApplication::LoadConfigData()
|
|||||||
|
|
||||||
// Set debug output
|
// Set debug output
|
||||||
pLogOutput = 0;
|
pLogOutput = 0;
|
||||||
if ((TempMember = ConfigMember->GetMember( "Log/Output", true )))
|
if ((TempMember = ConfigMember->GetChild( "Log/Output", true )))
|
||||||
{
|
{
|
||||||
TempMember = TempMember->GetFirstChild();
|
TempMember = TempMember->GetFirstChild();
|
||||||
while (TempMember)
|
while (TempMember)
|
||||||
@@ -193,7 +193,7 @@ bool CApplication::LoadConfigData()
|
|||||||
SetLogParam( pLogLevel, pLogOutput );
|
SetLogParam( pLogLevel, pLogOutput );
|
||||||
|
|
||||||
// Load Address List
|
// Load Address List
|
||||||
if ((AddressFile = (char*)ConfigMember->GetMemStr( "AddressList/Path", NULL )))
|
if ((AddressFile = (char*)ConfigMember->GetChStr( "AddressList/Path", NULL )))
|
||||||
{
|
{
|
||||||
if (JSONparser->ReadFromFile( "address", AddressFile )) {
|
if (JSONparser->ReadFromFile( "address", AddressFile )) {
|
||||||
if (Log) Log->Message( dlLow, dlLow, "%s: Address file loaded (%s)", ProcessName, AddressFile );
|
if (Log) Log->Message( dlLow, dlLow, "%s: Address file loaded (%s)", ProcessName, AddressFile );
|
||||||
@@ -204,10 +204,10 @@ bool CApplication::LoadConfigData()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Configure Selector
|
// Configure Selector
|
||||||
if ((TempMember = ConfigMember->GetMember( "Selector" )))
|
if ((TempMember = ConfigMember->GetChild( "Selector" )))
|
||||||
{
|
{
|
||||||
// Create Selector
|
// Create Selector
|
||||||
Selector = new CSelect( (int)TempMember->GetMemInt( "Wait", 5, true ), LogLevel );
|
Selector = new CSelect( (int)TempMember->GetChInt( "Wait", 5, true ), LogLevel );
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -235,7 +235,7 @@ bool CApplication::Init()
|
|||||||
bool CApplication::InitConfig( const char * pConfigPath )
|
bool CApplication::InitConfig( const char * pConfigPath )
|
||||||
{
|
{
|
||||||
// Check if Datatree exists
|
// Check if Datatree exists
|
||||||
if (!DataTree || !(ConfigMember = DataTree->GetMember( pConfigPath ))) {
|
if (!DataTree || !(ConfigMember = DataTree->GetChild( pConfigPath ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,7 +254,7 @@ bool CApplication::InitFunctions( const char * pConfigPath )
|
|||||||
char * Type;
|
char * Type;
|
||||||
|
|
||||||
// Check of path exists
|
// Check of path exists
|
||||||
if (!DataTree || !(FunctionConfigMember = DataTree->GetMember( pConfigPath )))
|
if (!DataTree || !(FunctionConfigMember = DataTree->GetChild( pConfigPath )))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Process each Channel
|
// Process each Channel
|
||||||
@@ -262,7 +262,7 @@ bool CApplication::InitFunctions( const char * pConfigPath )
|
|||||||
while (TempMember)
|
while (TempMember)
|
||||||
{
|
{
|
||||||
// Get function parameters
|
// Get function parameters
|
||||||
Type = (char*)TempMember->GetMemStr( "Type", "Custom", true );
|
Type = (char*)TempMember->GetChStr( "Type", "Custom", true );
|
||||||
|
|
||||||
// Get or create function
|
// Get or create function
|
||||||
if (!strcasecmp( Type, "WatchdogClient" )) {
|
if (!strcasecmp( Type, "WatchdogClient" )) {
|
||||||
@@ -297,7 +297,7 @@ bool CApplication::InitFunctionLinks( const char * pConfigPath )
|
|||||||
CDataMember * TempMember;
|
CDataMember * TempMember;
|
||||||
|
|
||||||
// Check of path exists
|
// Check of path exists
|
||||||
if (!DataTree || !(LinkConfigMember = DataTree->GetMember( pConfigPath )))
|
if (!DataTree || !(LinkConfigMember = DataTree->GetChild( pConfigPath )))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Process each Channel
|
// Process each Channel
|
||||||
@@ -305,7 +305,7 @@ bool CApplication::InitFunctionLinks( const char * pConfigPath )
|
|||||||
while (FunctionItem)
|
while (FunctionItem)
|
||||||
{
|
{
|
||||||
// Build links for function
|
// Build links for function
|
||||||
if ((TempMember = LinkConfigMember->GetMember( FunctionItem->Function->GetName() )))
|
if ((TempMember = LinkConfigMember->GetChild( FunctionItem->Function->GetName() )))
|
||||||
FunctionItem->Function->InitChannelLinks( TempMember );
|
FunctionItem->Function->InitChannelLinks( TempMember );
|
||||||
|
|
||||||
// Next
|
// Next
|
||||||
|
|||||||
@@ -148,18 +148,16 @@ bool CDataMember::Clear()
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
CDataMember * CDataMember::GetChild( const char * Path, bool Create )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
CDataMember ** Child;
|
CDataMember ** Child;
|
||||||
CDataMember * PrevChild;
|
|
||||||
char * Pos;
|
char * Pos;
|
||||||
char * EndPos;
|
char * EndPos;
|
||||||
char * Key;
|
char * Key;
|
||||||
unsigned short KeyLen;
|
unsigned short KeyLen;
|
||||||
int Index;
|
int Index;
|
||||||
int Count;
|
int Count;
|
||||||
bool Last = false;
|
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!Path || !*Path) {
|
if (!Path || !*Path) {
|
||||||
@@ -197,11 +195,7 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
|||||||
Pos++;
|
Pos++;
|
||||||
if (!*Pos)
|
if (!*Pos)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Check if last
|
|
||||||
Pos++;
|
Pos++;
|
||||||
if (!*Pos)
|
|
||||||
Last = true;
|
|
||||||
|
|
||||||
if (Pos == Key+1) {
|
if (Pos == Key+1) {
|
||||||
// Empty bracket only allowed for create
|
// Empty bracket only allowed for create
|
||||||
@@ -210,10 +204,8 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
|||||||
Index = -1;
|
Index = -1;
|
||||||
|
|
||||||
// find end of list
|
// find end of list
|
||||||
PrevChild = NULL;
|
|
||||||
Child = &(Member->FirstChild);
|
Child = &(Member->FirstChild);
|
||||||
while (*Child) {
|
while (*Child) {
|
||||||
PrevChild = *Child;
|
|
||||||
Child = &((*Child)->NextPeer);
|
Child = &((*Child)->NextPeer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -224,11 +216,9 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
// Find element at requested index
|
// Find element at requested index
|
||||||
PrevChild = NULL;
|
|
||||||
Child = &(Member->FirstChild);
|
Child = &(Member->FirstChild);
|
||||||
Count = 0;
|
Count = 0;
|
||||||
while (*Child && (Count < Index)) {
|
while (*Child && (Count < Index)) {
|
||||||
PrevChild = *Child;
|
|
||||||
Child = &((*Child)->NextPeer);
|
Child = &((*Child)->NextPeer);
|
||||||
Count++;
|
Count++;
|
||||||
}
|
}
|
||||||
@@ -264,16 +254,9 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
|||||||
Pos++;
|
Pos++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// More elements?
|
|
||||||
if (!*Pos) {
|
|
||||||
Last = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find next parent
|
// Find next parent
|
||||||
PrevChild = NULL;
|
|
||||||
Child = &(Member->FirstChild);
|
Child = &(Member->FirstChild);
|
||||||
while (*Child && (((*Child)->NameLen != KeyLen) || strncasecmp( (*Child)->Name, Key, KeyLen ))) {
|
while (*Child && (((*Child)->NameLen != KeyLen) || strncasecmp( (*Child)->Name, Key, KeyLen ))) {
|
||||||
PrevChild = *Child;
|
|
||||||
Child = &((*Child)->NextPeer);
|
Child = &((*Child)->NextPeer);
|
||||||
}
|
}
|
||||||
if (!*Child && Create) {
|
if (!*Child && Create) {
|
||||||
@@ -288,12 +271,12 @@ CDataMember * CDataMember::GetMember( const char * Path, bool Create )
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
CDataMember * CDataMember::GetMemFirstChild( const char * Path )
|
CDataMember * CDataMember::GetChFirstChild( const char * Path )
|
||||||
{
|
{
|
||||||
CDataMember * Member = NULL;
|
CDataMember * Member = NULL;
|
||||||
|
|
||||||
// Find member
|
// Find member
|
||||||
Member = (!Path || !*Path)? this : GetMember( Path, false );
|
Member = (!Path || !*Path)? this : GetChild( Path, false );
|
||||||
|
|
||||||
// Check if valid type
|
// Check if valid type
|
||||||
if (!Member || ((Member->Type != jtObject) && (Member->Type != jtNull))) {
|
if (!Member || ((Member->Type != jtObject) && (Member->Type != jtNull))) {
|
||||||
@@ -304,14 +287,14 @@ CDataMember * CDataMember::GetMemFirstChild( const char * Path )
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
CDataMember * CDataMember::GetMemElement( const char * Path, const int Index )
|
CDataMember * CDataMember::GetChElement( const char * Path, const int Index )
|
||||||
{
|
{
|
||||||
CDataMember * Member = NULL;
|
CDataMember * Member = NULL;
|
||||||
CDataMember * Child = NULL;
|
CDataMember * Child = NULL;
|
||||||
int Count;
|
int Count;
|
||||||
|
|
||||||
// Find Member
|
// Find Member
|
||||||
Member = (!Path || !*Path)? this : GetMember( Path, false );
|
Member = (!Path || !*Path)? this : GetChild( Path, false );
|
||||||
|
|
||||||
// Check if valid type
|
// Check if valid type
|
||||||
if (!Member || ((Member->Type != jtArray) && (Member->Type != jtNull))) {
|
if (!Member || ((Member->Type != jtArray) && (Member->Type != jtNull))) {
|
||||||
@@ -340,7 +323,7 @@ bool CDataMember::Delete( const char * Path )
|
|||||||
Clear();
|
Clear();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if ((Member = GetMember( Path, false ))) {
|
else if ((Member = GetChild( Path, false ))) {
|
||||||
// If valid path, destroy member
|
// If valid path, destroy member
|
||||||
delete Member;
|
delete Member;
|
||||||
return true;
|
return true;
|
||||||
@@ -381,12 +364,12 @@ bool CDataMember::SetValue( EDataType pType, const char * pValue, int pLen )
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataMember::SetMemObject( const char * Path )
|
bool CDataMember::SetChObject( const char * Path )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, true ))) {
|
if (!(Member = GetChild( Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -396,12 +379,12 @@ bool CDataMember::SetMemObject( const char * Path )
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataMember::SetMemArray( const char * Path )
|
bool CDataMember::SetChArray( const char * Path )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, true ))) {
|
if (!(Member = GetChild( Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,12 +394,12 @@ bool CDataMember::SetMemArray( const char * Path )
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataMember::SetMemStr( const char * Path, const char * Value, const int Len )
|
bool CDataMember::SetChStr( const char * Path, const char * Value, const int Len )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, true ))) {
|
if (!(Member = GetChild( Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -431,13 +414,13 @@ bool CDataMember::SetMemStr( const char * Path, const char * Value, const int L
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataMember::SetMemInt( const char * Path, const long Value, const char * Mask )
|
bool CDataMember::SetChInt( const char * Path, const long Value, const char * Mask )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
char ValueStr[20];
|
char ValueStr[20];
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, true ))) {
|
if (!(Member = GetChild( Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,13 +431,13 @@ bool CDataMember::SetMemInt( const char * Path, const long Value, const char *
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataMember::SetMemFloat( const char * Path, const double Value, const char * Mask )
|
bool CDataMember::SetChFloat( const char * Path, const double Value, const char * Mask )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
char ValueStr[20];
|
char ValueStr[20];
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, true ))) {
|
if (!(Member = GetChild( Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -465,12 +448,12 @@ bool CDataMember::SetMemFloat( const char * Path, const double Value, const cha
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataMember::SetMemBool( const char * Path, const bool Value )
|
bool CDataMember::SetChBool( const char * Path, const bool Value )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, true ))) {
|
if (!(Member = GetChild( Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -480,12 +463,12 @@ bool CDataMember::SetMemBool( const char * Path, const bool Value )
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool CDataMember::SetMemNull( const char * Path )
|
bool CDataMember::SetChNull( const char * Path )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, true ))) {
|
if (!(Member = GetChild( Path, true ))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -500,7 +483,7 @@ const char * CDataMember::GetName( const char * Path )
|
|||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, false ))) {
|
if (!(Member = GetChild( Path, false ))) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return Member->Name;
|
return Member->Name;
|
||||||
@@ -512,7 +495,7 @@ EDataType CDataMember::GetType( const char * Path )
|
|||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if (!(Member = GetMember( Path, false ))) {
|
if (!(Member = GetChild( Path, false ))) {
|
||||||
return jtNull;
|
return jtNull;
|
||||||
}
|
}
|
||||||
return Member->Type;
|
return Member->Type;
|
||||||
@@ -524,7 +507,7 @@ const int CDataMember::GetLen( const char * Path )
|
|||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if ((Member = GetMember( Path, false ))) {
|
if ((Member = GetChild( Path, false ))) {
|
||||||
return Member->Len;
|
return Member->Len;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -533,12 +516,12 @@ const int CDataMember::GetLen( const char * Path )
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
const char * CDataMember::GetMemStr( const char * Path, const char * Default, bool Create )
|
const char * CDataMember::GetChStr( const char * Path, const char * Default, bool Create )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if ((Member = GetMember( Path, Create )) &&
|
if ((Member = GetChild( Path, Create )) &&
|
||||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||||
return Member->Value;
|
return Member->Value;
|
||||||
}
|
}
|
||||||
@@ -552,12 +535,12 @@ const char * CDataMember::GetMemStr( const char * Path, const char * Default, bo
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
const char * CDataMember::GetMemStr( const char * Path, int &Len, const char * Default, bool Create )
|
const char * CDataMember::GetChStr( const char * Path, int &Len, const char * Default, bool Create )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if ((Member = GetMember( Path, Create )) &&
|
if ((Member = GetChild( Path, Create )) &&
|
||||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||||
Len = Member->Len;
|
Len = Member->Len;
|
||||||
return Member->Value;
|
return Member->Value;
|
||||||
@@ -574,12 +557,12 @@ const char * CDataMember::GetMemStr( const char * Path, int &Len, const char * D
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
const long CDataMember::GetMemInt( const char * Path, long Default, bool Create, const char * Mask )
|
const long CDataMember::GetChInt( const char * Path, long Default, bool Create, const char * Mask )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if ((Member = GetMember( Path, Create )) &&
|
if ((Member = GetChild( Path, Create )) &&
|
||||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||||
return strtol( Member->Value, NULL, 10 );
|
return strtol( Member->Value, NULL, 10 );
|
||||||
}
|
}
|
||||||
@@ -595,12 +578,12 @@ const long CDataMember::GetMemInt( const char * Path, long Default, bool Create
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
const double CDataMember::GetMemFloat( const char * Path, double Default, bool Create, const char * Mask )
|
const double CDataMember::GetChFloat( const char * Path, double Default, bool Create, const char * Mask )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if ((Member = GetMember( Path, Create )) &&
|
if ((Member = GetChild( Path, Create )) &&
|
||||||
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
((Member->Type == jtString) || (Member->Type == jtFloat) || (Member->Type == jtInt) || (Member->Type == jtBool)) ) {
|
||||||
return strtod( Member->Value, NULL );
|
return strtod( Member->Value, NULL );
|
||||||
}
|
}
|
||||||
@@ -616,12 +599,12 @@ const double CDataMember::GetMemFloat( const char * Path, double Default, bool
|
|||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
const bool CDataMember::GetMemBool( const char * Path, bool Default, bool Create )
|
const bool CDataMember::GetChBool( const char * Path, bool Default, bool Create )
|
||||||
{
|
{
|
||||||
CDataMember * Member;
|
CDataMember * Member;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if ((Member = GetMember( Path, Create ))) {
|
if ((Member = GetChild( Path, Create ))) {
|
||||||
if (Member->Type == jtString) {
|
if (Member->Type == jtString) {
|
||||||
return ((!*Member->Value)? false : true);
|
return ((!*Member->Value)? false : true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,46 +66,46 @@ public:
|
|||||||
const int GetLen() { return Len; };
|
const int GetLen() { return Len; };
|
||||||
const int GetLen( const char * Path );
|
const int GetLen( const char * Path );
|
||||||
|
|
||||||
CDataMember * GetMember( const char * Path, bool Create = false );
|
CDataMember * GetChild( const char * Path, bool Create = false );
|
||||||
CDataMember * GetMemFirstChild( const char * Path );
|
CDataMember * GetChFirstChild( const char * Path );
|
||||||
CDataMember * GetMemElement( const char * Path, const int Index );
|
CDataMember * GetChElement( const char * Path, const int Index );
|
||||||
|
|
||||||
inline CDataMember * GetFirstChild() { return FirstChild; };
|
inline CDataMember * GetFirstChild() { return FirstChild; };
|
||||||
inline CDataMember * GetElement( const int Index ) { return GetMemElement( NULL, Index ); };
|
inline CDataMember * GetElement( const int Index ) { return GetChElement( NULL, Index ); };
|
||||||
|
|
||||||
inline CDataMember * GetParent() { return Parent; };
|
inline CDataMember * GetParent() { return Parent; };
|
||||||
inline CDataMember * GetPrevPeer() { return PrevPeer; };
|
inline CDataMember * GetPrevPeer() { return PrevPeer; };
|
||||||
inline CDataMember * GetNextPeer() { return NextPeer; };
|
inline CDataMember * GetNextPeer() { return NextPeer; };
|
||||||
|
|
||||||
const char * GetMemStr( const char * Path, const char * Default = NULL, bool Create = false );
|
const char * GetChStr( const char * Path, const char * Default = NULL, bool Create = false );
|
||||||
const char * GetMemStr( const char * Path, int &Len, const char * Default = NULL, bool Create = false );
|
const char * GetChStr( const char * Path, int &Len, const char * Default = NULL, bool Create = false );
|
||||||
const bool GetMemBool( const char * Path, bool Default = false, bool Create = false );
|
const bool GetChBool( const char * Path, bool Default = false, bool Create = false );
|
||||||
const long GetMemInt( const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL );
|
const long GetChInt( const char * Path, long Default = 0, bool Create = false, const char * Mask = NULL );
|
||||||
const double GetMemFloat( const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL );
|
const double GetChFloat( const char * Path, double Default = 0.0, bool Create = false, const char * Mask = NULL );
|
||||||
|
|
||||||
inline const char * GetStr( const char * Default = NULL, bool Create = false ) { return GetMemStr( NULL, Default, Create ); };
|
inline const char * GetStr( const char * Default = NULL, bool Create = false ) { return GetChStr( NULL, Default, Create ); };
|
||||||
inline const char * GetStr( int &Len, const char * Default = NULL, bool Create = false ) { return GetMemStr( NULL, Len, Default, Create ); };
|
inline const char * GetStr( int &Len, const char * Default = NULL, bool Create = false ) { return GetChStr( NULL, Len, Default, Create ); };
|
||||||
inline const bool GetBool( bool Default = false, bool Create = false ) { return GetMemBool( NULL, Default, Create ); };
|
inline const bool GetBool( bool Default = false, bool Create = false ) { return GetChBool( NULL, Default, Create ); };
|
||||||
inline const long GetInt( long Default = 0, bool Create = false, const char * Mask = NULL ) { return GetMemInt( NULL, Default, Create, Mask ); };
|
inline const long GetInt( long Default = 0, bool Create = false, const char * Mask = NULL ) { return GetChInt( NULL, Default, Create, Mask ); };
|
||||||
inline const double GetFloat( double Default = 0.0, bool Create = false, const char * Mask = NULL ) { return GetMemFloat( NULL, Default, Create, Mask ); };
|
inline const double GetFloat( double Default = 0.0, bool Create = false, const char * Mask = NULL ) { return GetChFloat( NULL, Default, Create, Mask ); };
|
||||||
|
|
||||||
bool SetMemBool( const char * Path, const bool Value );
|
bool SetChBool( const char * Path, const bool Value );
|
||||||
bool SetMemInt( const char * Path, const long Value, const char * Mask = NULL );
|
bool SetChInt( const char * Path, const long Value, const char * Mask = NULL );
|
||||||
bool SetMemFloat( const char * Path, const double Value, const char * Mask = NULL );
|
bool SetChFloat( const char * Path, const double Value, const char * Mask = NULL );
|
||||||
bool SetMemStr( const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values
|
bool SetChStr( const char * Path, const char * Value = NULL, const int Len = -1 ); // Use Len param if Value contains NULL values
|
||||||
|
|
||||||
inline bool SetBool( const bool Value ) { return SetMemBool( NULL, Value ); };
|
inline bool SetBool( const bool Value ) { return SetChBool( NULL, Value ); };
|
||||||
inline bool SetInt( const long Value, const char * Mask = NULL ) { return SetMemInt( NULL, Value, Mask ); };
|
inline bool SetInt( const long Value, const char * Mask = NULL ) { return SetChInt( NULL, Value, Mask ); };
|
||||||
inline bool SetFloat( const double Value, const char * Mask = NULL ) { return SetMemFloat( NULL, Value, Mask ); };
|
inline bool SetFloat( const double Value, const char * Mask = NULL ) { return SetChFloat( NULL, Value, Mask ); };
|
||||||
inline bool SetStr( const char * Value = NULL, const int Len = -1 ) { return SetMemStr( NULL, Value, Len ); };
|
inline bool SetStr( const char * Value = NULL, const int Len = -1 ) { return SetChStr( NULL, Value, Len ); };
|
||||||
|
|
||||||
bool SetMemNull( const char * Path );
|
bool SetChNull( const char * Path );
|
||||||
bool SetMemObject( const char * Path );
|
bool SetChObject( const char * Path );
|
||||||
bool SetMemArray( const char * Path );
|
bool SetChArray( const char * Path );
|
||||||
|
|
||||||
inline bool SetNull() { return SetMemNull( NULL ); };
|
inline bool SetNull() { return SetChNull( NULL ); };
|
||||||
inline bool SetObject() { return SetMemObject( NULL ); };
|
inline bool SetObject() { return SetChObject( NULL ); };
|
||||||
inline bool SetArray() { return SetMemArray( NULL ); };
|
inline bool SetArray() { return SetChArray( NULL ); };
|
||||||
|
|
||||||
bool Clear();
|
bool Clear();
|
||||||
bool Delete( const char * Path );
|
bool Delete( const char * Path );
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
// Variable used to temp values with
|
// Variable used to temp values with
|
||||||
static char ReturnStr[20];
|
static char ReturnStr[30];
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -342,7 +342,7 @@ bool CEventBuffer::ClearCurrentEvent()
|
|||||||
|
|
||||||
bool CEventBuffer::AddEvent( TEventEntry * Event, unsigned int EventNo )
|
bool CEventBuffer::AddEvent( TEventEntry * Event, unsigned int EventNo )
|
||||||
{
|
{
|
||||||
bool result;
|
bool result = true;
|
||||||
TEventEntry * EventCopy = NULL;
|
TEventEntry * EventCopy = NULL;
|
||||||
|
|
||||||
// Validate Event
|
// Validate Event
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ bool CFunctionCore::LoadConfigData()
|
|||||||
|
|
||||||
// Get debug level
|
// Get debug level
|
||||||
pLogLevel = dlNone;
|
pLogLevel = dlNone;
|
||||||
TempStr = (char*)ConfigMember->GetMemStr( "Log/Level", "Medium", true );
|
TempStr = (char*)ConfigMember->GetChStr( "Log/Level", "Medium", true );
|
||||||
if (TempStr)
|
if (TempStr)
|
||||||
{
|
{
|
||||||
if (!strcasecmp( TempStr, "Low" ))
|
if (!strcasecmp( TempStr, "Low" ))
|
||||||
@@ -133,7 +133,7 @@ bool CFunctionCore::LoadConfigData()
|
|||||||
|
|
||||||
// Set debug output
|
// Set debug output
|
||||||
pLogOutput = 0;
|
pLogOutput = 0;
|
||||||
if ((TempMember = ConfigMember->GetMember( "Log/Output", true )))
|
if ((TempMember = ConfigMember->GetChild( "Log/Output", true )))
|
||||||
{
|
{
|
||||||
TempMember = TempMember->GetFirstChild();
|
TempMember = TempMember->GetFirstChild();
|
||||||
while (TempMember)
|
while (TempMember)
|
||||||
@@ -163,13 +163,13 @@ bool CFunctionCore::LoadConfigData()
|
|||||||
SetLogParam( pLogLevel, pLogOutput );
|
SetLogParam( pLogLevel, pLogOutput );
|
||||||
|
|
||||||
// Load Channels
|
// Load Channels
|
||||||
TempMember = ConfigMember->GetMemFirstChild( "Channels" );
|
TempMember = ConfigMember->GetChFirstChild( "Channels" );
|
||||||
while (TempMember)
|
while (TempMember)
|
||||||
{
|
{
|
||||||
if (TempMember->GetName()) {
|
if (TempMember->GetName()) {
|
||||||
AddChannel( TempMember->GetName(),
|
AddChannel( TempMember->GetName(),
|
||||||
TempMember->GetMemBool( "InputEnabled", true, true ),
|
TempMember->GetChBool( "InputEnabled", true, true ),
|
||||||
TempMember->GetMemBool( "OutputEnabled", false, true ));
|
TempMember->GetChBool( "OutputEnabled", false, true ));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next
|
// Next
|
||||||
@@ -197,9 +197,9 @@ bool CFunctionCore::LoadChannelLinkData()
|
|||||||
{
|
{
|
||||||
// Get Parameters
|
// Get Parameters
|
||||||
LinkOutputChannel( Channel->Name,
|
LinkOutputChannel( Channel->Name,
|
||||||
FunctionMember->GetMemStr( "Function" ),
|
FunctionMember->GetChStr( "Function" ),
|
||||||
FunctionMember->GetMemStr( "Channel" ),
|
FunctionMember->GetChStr( "Channel" ),
|
||||||
FunctionMember->GetMemBool( "Bidirectional" ) );
|
FunctionMember->GetChBool( "Bidirectional" ) );
|
||||||
// Next
|
// Next
|
||||||
FunctionMember = FunctionMember->GetNextPeer();
|
FunctionMember = FunctionMember->GetNextPeer();
|
||||||
}
|
}
|
||||||
@@ -224,7 +224,7 @@ bool CFunctionCore::Init()
|
|||||||
bool CFunctionCore::InitConfig( const char * pConfigPath )
|
bool CFunctionCore::InitConfig( const char * pConfigPath )
|
||||||
{
|
{
|
||||||
// Validate
|
// Validate
|
||||||
if (!DataTree || !(ConfigMember = DataTree->GetMember( pConfigPath, true )))
|
if (!DataTree || !(ConfigMember = DataTree->GetChild( pConfigPath, true )))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Load configuration
|
// Load configuration
|
||||||
@@ -252,7 +252,7 @@ bool CFunctionCore::InitConfig( CDataMember * pBaseMember )
|
|||||||
bool CFunctionCore::InitChannelLinks( const char * pLinkConfigPath )
|
bool CFunctionCore::InitChannelLinks( const char * pLinkConfigPath )
|
||||||
{
|
{
|
||||||
// Validate
|
// Validate
|
||||||
if (!DataTree || !(LinkConfigMember = DataTree->GetMember( pLinkConfigPath, true )))
|
if (!DataTree || !(LinkConfigMember = DataTree->GetChild( pLinkConfigPath, true )))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Load configuration
|
// Load configuration
|
||||||
|
|||||||
@@ -136,15 +136,19 @@ bool CJSONparse::WriteToHandle( const char * BasePath, const int Handle, const i
|
|||||||
OutputHandle = Handle;
|
OutputHandle = Handle;
|
||||||
|
|
||||||
// Get Root object
|
// Get Root object
|
||||||
if (!(Member = DataTree->GetMember( BasePath ))) {
|
if (!(Member = DataTree->GetChild( BasePath ))) {
|
||||||
Error = true;
|
Error = true;
|
||||||
sprintf( ErrorText, "Invalid root object path" );
|
sprintf( ErrorText, "Invalid root object path" );
|
||||||
|
OutputHandle = -1;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print to file
|
// Print to file
|
||||||
PrintObject( Member, Indent );
|
if (!PrintObject( Member, Indent ) ||
|
||||||
write( OutputHandle, "\n", 1 );
|
(write( OutputHandle, "\n", 1 ) < 0)) {
|
||||||
|
OutputHandle = -1;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
OutputHandle = -1;
|
OutputHandle = -1;
|
||||||
return true;
|
return true;
|
||||||
@@ -287,7 +291,7 @@ bool CJSONparse::ReadFromBuffer( const char * BasePath )
|
|||||||
Error = false;
|
Error = false;
|
||||||
|
|
||||||
// Get/Create Root object
|
// Get/Create Root object
|
||||||
if (!(BaseMember = DataTree->GetMember( BasePath, true ))) {
|
if (!(BaseMember = DataTree->GetChild( BasePath, true ))) {
|
||||||
Error = true;
|
Error = true;
|
||||||
sprintf( ErrorText, "Invalid root object path" );
|
sprintf( ErrorText, "Invalid root object path" );
|
||||||
return false;
|
return false;
|
||||||
@@ -568,7 +572,7 @@ bool CJSONparse::ParseObject( CDataMember * Object )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if Member exists
|
// Check if Member exists
|
||||||
Member = Object->GetMember( MemberName, true );
|
Member = Object->GetChild( MemberName, true );
|
||||||
|
|
||||||
// Check for delimiter
|
// Check for delimiter
|
||||||
SkipWhiteSpace();
|
SkipWhiteSpace();
|
||||||
@@ -753,8 +757,11 @@ bool CJSONparse::ParsePrimitive( CDataMember * Member )
|
|||||||
|
|
||||||
bool CJSONparse::PrintString( char * String, int Len )
|
bool CJSONparse::PrintString( char * String, int Len )
|
||||||
{
|
{
|
||||||
|
int BytesWritten;
|
||||||
|
|
||||||
// Start quote
|
// Start quote
|
||||||
write( OutputHandle, "\"", 1 );
|
if (write( OutputHandle, "\"", 1 ) < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
// Content
|
// Content
|
||||||
BufPos = String;
|
BufPos = String;
|
||||||
@@ -766,7 +773,8 @@ bool CJSONparse::PrintString( char * String, int Len )
|
|||||||
BufPos++;
|
BufPos++;
|
||||||
|
|
||||||
// Print Portion
|
// Print Portion
|
||||||
write( OutputHandle, Mark, (BufPos-Mark) );
|
if (write( OutputHandle, Mark, (BufPos-Mark) ) < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
// Handle special chars
|
// Handle special chars
|
||||||
if (BufPos-String >= Len) {
|
if (BufPos-String >= Len) {
|
||||||
@@ -774,24 +782,27 @@ bool CJSONparse::PrintString( char * String, int Len )
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
switch (*BufPos) {
|
switch (*BufPos) {
|
||||||
case '\b': write( OutputHandle, "\\b", 2 ); break;
|
case '\b': BytesWritten = write( OutputHandle, "\\b", 2 ); break;
|
||||||
case '\f': write( OutputHandle, "\\f", 2 ); break;
|
case '\f': BytesWritten = write( OutputHandle, "\\f", 2 ); break;
|
||||||
case '\n': write( OutputHandle, "\\n", 2 ); break;
|
case '\n': BytesWritten = write( OutputHandle, "\\n", 2 ); break;
|
||||||
case '\r': write( OutputHandle, "\\r", 2 ); break;
|
case '\r': BytesWritten = write( OutputHandle, "\\r", 2 ); break;
|
||||||
case '\t': write( OutputHandle, "\\t", 2 ); break;
|
case '\t': BytesWritten = write( OutputHandle, "\\t", 2 ); break;
|
||||||
case '/': write( OutputHandle, "\\/", 2 ); break;
|
case '/': BytesWritten = write( OutputHandle, "\\/", 2 ); break;
|
||||||
case '\\': write( OutputHandle, "\\\\", 2 ); break;
|
case '\\': BytesWritten = write( OutputHandle, "\\\\", 2 ); break;
|
||||||
case '"': write( OutputHandle, "\\\"", 2 ); break;
|
case '"': BytesWritten = write( OutputHandle, "\\\"", 2 ); break;
|
||||||
default:
|
default:
|
||||||
dprintf( OutputHandle, "\\u%04X", (unsigned char)*BufPos );
|
BytesWritten = dprintf( OutputHandle, "\\u%04X", (unsigned char)*BufPos );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (BytesWritten < 0)
|
||||||
|
return false;
|
||||||
BufPos++;
|
BufPos++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// End Quote
|
// End Quote
|
||||||
write( OutputHandle, "\"", 1 );
|
if (write( OutputHandle, "\"", 1 ) < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -805,7 +816,8 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
|
|||||||
int Count = 0;
|
int Count = 0;
|
||||||
|
|
||||||
// Opening brace
|
// Opening brace
|
||||||
write( OutputHandle, "{", 1 );
|
if (write( OutputHandle, "{", 1 ) < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
// Extend spacer
|
// Extend spacer
|
||||||
if (Indent) {
|
if (Indent) {
|
||||||
@@ -821,17 +833,22 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
|
|||||||
if (Indent) {
|
if (Indent) {
|
||||||
if (First) {
|
if (First) {
|
||||||
First = false;
|
First = false;
|
||||||
write( OutputHandle, "\n", 1 );
|
if (write( OutputHandle, "\n", 1 ) < 0)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
write( OutputHandle, Spacer, SpacerLen );
|
if (write( OutputHandle, Spacer, SpacerLen ) < 0)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print key name
|
// Print key name
|
||||||
PrintString( Member->Name, strlen(Member->Name) );
|
if (!PrintString( Member->Name, strlen(Member->Name) ))
|
||||||
|
return false;
|
||||||
if (Indent) {
|
if (Indent) {
|
||||||
write( OutputHandle," : ", 3 );
|
if (write( OutputHandle," : ", 3 ) < 0)
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
write( OutputHandle, ":", 1 );
|
if (write( OutputHandle, ":", 1 ) < 0)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print value
|
// Print value
|
||||||
@@ -839,37 +856,50 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
|
|||||||
switch (Member->Type)
|
switch (Member->Type)
|
||||||
{
|
{
|
||||||
case jtNull :
|
case jtNull :
|
||||||
write( OutputHandle, "null", 4 );
|
if (write( OutputHandle, "null", 4 ) < 0)
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtBool :
|
case jtBool :
|
||||||
if (!strcmp( Member->Value, "0" ))
|
if (!strcmp( Member->Value, "0" )) {
|
||||||
write( OutputHandle, "false", 5 );
|
if (write( OutputHandle, "false", 5 ) < 0)
|
||||||
else
|
return false;
|
||||||
write( OutputHandle, "true", 4 );
|
}
|
||||||
|
else {
|
||||||
|
if (write( OutputHandle, "true", 4 ) < 0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtInt :
|
case jtInt :
|
||||||
case jtFloat :
|
case jtFloat :
|
||||||
write( OutputHandle, Member->Value, Member->Len );
|
if (write( OutputHandle, Member->Value, Member->Len ) < 0)
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtString :
|
case jtString :
|
||||||
PrintString( Member->Value, Member->Len );
|
if (!PrintString( Member->Value, Member->Len ))
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtArray :
|
case jtArray :
|
||||||
PrintArray( Member, Indent );
|
if (!PrintArray( Member, Indent ))
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtObject :
|
case jtObject :
|
||||||
PrintObject( Member, Indent );
|
if (!PrintObject( Member, Indent ))
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!Last)
|
if (!Last) {
|
||||||
write( OutputHandle, ",", 1 );
|
if (write( OutputHandle, ",", 1 ) < 0)
|
||||||
if (Indent)
|
return false;
|
||||||
write( OutputHandle, "\n", 1 );
|
}
|
||||||
|
if (Indent) {
|
||||||
|
if (write( OutputHandle, "\n", 1 ) < 0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shorten spacer
|
// Shorten spacer
|
||||||
@@ -879,9 +909,12 @@ bool CJSONparse::PrintObject( CDataMember * Object, const int Indent )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Closing brace
|
// Closing brace
|
||||||
if (Indent)
|
if (Indent) {
|
||||||
write( OutputHandle, Spacer, SpacerLen );
|
if (write( OutputHandle, Spacer, SpacerLen ) < 0)
|
||||||
write( OutputHandle, "}", 1 );
|
return false;
|
||||||
|
}
|
||||||
|
if (write( OutputHandle, "}", 1 ))
|
||||||
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -894,7 +927,8 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
|
|||||||
int Count = 0;
|
int Count = 0;
|
||||||
|
|
||||||
// Opening brace
|
// Opening brace
|
||||||
write( OutputHandle, "[", 1 );
|
if (write( OutputHandle, "[", 1 ) < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
// Extend spacer
|
// Extend spacer
|
||||||
if (Indent) {
|
if (Indent) {
|
||||||
@@ -910,42 +944,53 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
|
|||||||
if (Indent) {
|
if (Indent) {
|
||||||
if (First) {
|
if (First) {
|
||||||
First = false;
|
First = false;
|
||||||
write( OutputHandle, "\n", 1 );
|
if (write( OutputHandle, "\n", 1 ) < 0)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
write( OutputHandle, Spacer, SpacerLen );
|
if (write( OutputHandle, Spacer, SpacerLen ) < 0)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Last = (++Count >= Array->Len);
|
Last = (++Count >= Array->Len);
|
||||||
switch (Member->Type)
|
switch (Member->Type)
|
||||||
{
|
{
|
||||||
case jtNull :
|
case jtNull :
|
||||||
write( OutputHandle, "null", 4 );
|
if (write( OutputHandle, "null", 4 ) < 0)
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtBool :
|
case jtBool :
|
||||||
case jtInt :
|
case jtInt :
|
||||||
case jtFloat :
|
case jtFloat :
|
||||||
write( OutputHandle, Member->Value, Member->Len );
|
if (write( OutputHandle, Member->Value, Member->Len ) < 0)
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtString :
|
case jtString :
|
||||||
write( OutputHandle, "\"", 1 );
|
if ((write( OutputHandle, "\"", 1 ) < 0) ||
|
||||||
write( OutputHandle, Member->Value, Member->Len );
|
(write( OutputHandle, Member->Value, Member->Len ) < 0) ||
|
||||||
write( OutputHandle, "\"", 1 );
|
(write( OutputHandle, "\"", 1 ) < 0))
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtArray :
|
case jtArray :
|
||||||
PrintArray( Member, Indent );
|
if (!PrintArray( Member, Indent ))
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case jtObject :
|
case jtObject :
|
||||||
PrintObject( Member, Indent );
|
if (!PrintObject( Member, Indent ))
|
||||||
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!Last)
|
if (!Last) {
|
||||||
write( OutputHandle, ",", 1 );
|
if (write( OutputHandle, ",", 1 ) < 0)
|
||||||
if (Indent)
|
return false;
|
||||||
write( OutputHandle, "\n", 1 );
|
}
|
||||||
|
if (Indent) {
|
||||||
|
if (write( OutputHandle, "\n", 1 ) < 0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shorten spacer
|
// Shorten spacer
|
||||||
@@ -955,9 +1000,12 @@ bool CJSONparse::PrintArray( CDataMember * Array, const int Indent )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Closing brace
|
// Closing brace
|
||||||
if (Indent)
|
if (Indent) {
|
||||||
write( OutputHandle, Spacer, SpacerLen );
|
if (write( OutputHandle, Spacer, SpacerLen ) < 0)
|
||||||
write( OutputHandle, "]", 1 );
|
return false;
|
||||||
|
}
|
||||||
|
if (write( OutputHandle, "]", 1 ) < 0)
|
||||||
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ bool CSelectableCore::LoadConfigData()
|
|||||||
CFunctionCore::LoadConfigData();
|
CFunctionCore::LoadConfigData();
|
||||||
|
|
||||||
// Load Handles
|
// Load Handles
|
||||||
if ((TempMember = ConfigMember->GetMember( "Handles", false ))) {
|
if ((TempMember = ConfigMember->GetChild( "Handles", false ))) {
|
||||||
TempMember = TempMember->GetFirstChild();
|
TempMember = TempMember->GetFirstChild();
|
||||||
}
|
}
|
||||||
while (TempMember)
|
while (TempMember)
|
||||||
@@ -95,24 +95,24 @@ bool CSelectableCore::LoadConfigData()
|
|||||||
|
|
||||||
// Create Handle and channel link
|
// Create Handle and channel link
|
||||||
Handle = CreateHandle( TempMember->GetName(), false );
|
Handle = CreateHandle( TempMember->GetName(), false );
|
||||||
Handle->Channel = GetChannel( TempMember->GetMemStr( "Channel" ) );
|
Handle->Channel = GetChannel( TempMember->GetChStr( "Channel" ) );
|
||||||
|
|
||||||
Type = (char*)TempMember->GetMemStr( "Type", "TCPclient", true );
|
Type = (char*)TempMember->GetChStr( "Type", "TCPclient", true );
|
||||||
if (!strcasecmp( Type, "Serial" ))
|
if (!strcasecmp( Type, "Serial" ))
|
||||||
{
|
{
|
||||||
if ((Name = (char*)TempMember->GetMemStr( "Port/Name", NULL ))) {
|
if ((Name = (char*)TempMember->GetChStr( "Port/Name", NULL ))) {
|
||||||
sprintf( Path, "Address/%s/Address", Name );
|
sprintf( Path, "Address/%s/Address", Name );
|
||||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get address list value
|
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get address list value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Address = (char*)TempMember->GetMemStr( "Port/Address", NULL, true ); // Get default value
|
Address = (char*)TempMember->GetChStr( "Port/Address", NULL, true ); // Get default value
|
||||||
}
|
}
|
||||||
SetSerialHandle( Handle, Address );
|
SetSerialHandle( Handle, Address );
|
||||||
|
|
||||||
// Update configuration if specified
|
// Update configuration if specified
|
||||||
if ((SerialConfig = TempMember->GetMember( "Port/SerialConfig", false )))
|
if ((SerialConfig = TempMember->GetChild( "Port/SerialConfig", false )))
|
||||||
{
|
{
|
||||||
ParityText = (char*)SerialConfig->GetMemStr( "Parity", "none", true );
|
ParityText = (char*)SerialConfig->GetChStr( "Parity", "none", true );
|
||||||
if (!strcasecmp( ParityText, "none" ))
|
if (!strcasecmp( ParityText, "none" ))
|
||||||
Parity = NO_PARITY;
|
Parity = NO_PARITY;
|
||||||
else if (!strcasecmp( ParityText, "odd" ))
|
else if (!strcasecmp( ParityText, "odd" ))
|
||||||
@@ -121,132 +121,136 @@ bool CSelectableCore::LoadConfigData()
|
|||||||
Parity = EVEN_PARITY;
|
Parity = EVEN_PARITY;
|
||||||
else if (!strcasecmp( ParityText, "mark" ))
|
else if (!strcasecmp( ParityText, "mark" ))
|
||||||
Parity = MARK_PARITY;
|
Parity = MARK_PARITY;
|
||||||
|
else
|
||||||
|
Parity = NO_PARITY;
|
||||||
|
|
||||||
FlowCtrlText = (char*)SerialConfig->GetMemStr( "FlowCtrl", "none", true );
|
FlowCtrlText = (char*)SerialConfig->GetChStr( "FlowCtrl", "none", true );
|
||||||
if (!strcasecmp( FlowCtrlText, "none" ))
|
if (!strcasecmp( FlowCtrlText, "none" ))
|
||||||
FlowCtrl = NO_FLOWCTRL;
|
FlowCtrl = NO_FLOWCTRL;
|
||||||
else if (!strcasecmp( FlowCtrlText, "hardware" ))
|
else if (!strcasecmp( FlowCtrlText, "hardware" ))
|
||||||
FlowCtrl = HW_FLOWCTRL;
|
FlowCtrl = HW_FLOWCTRL;
|
||||||
else if (!strcasecmp( FlowCtrlText, "software" ))
|
else if (!strcasecmp( FlowCtrlText, "software" ))
|
||||||
FlowCtrl = SW_FLOWCTRL;
|
FlowCtrl = SW_FLOWCTRL;
|
||||||
|
else
|
||||||
|
FlowCtrl = NO_FLOWCTRL;
|
||||||
|
|
||||||
Handle->SerialConfig = true;
|
Handle->SerialConfig = true;
|
||||||
SetSerialHandleConfig( Handle, SerialConfig->GetMemInt( "BaudRate", 19200, true ),
|
SetSerialHandleConfig( Handle, SerialConfig->GetChInt( "BaudRate", 19200, true ),
|
||||||
SerialConfig->GetMemInt( "DataBits", 8, true ),
|
SerialConfig->GetChInt( "DataBits", 8, true ),
|
||||||
Parity, SerialConfig->GetMemInt( "StopBits", 1, true ),
|
Parity, SerialConfig->GetChInt( "StopBits", 1, true ),
|
||||||
FlowCtrl, SerialConfig->GetMemInt( "DataWait", 0, true ));
|
FlowCtrl, SerialConfig->GetChInt( "DataWait", 0, true ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!strcasecmp( Type, "LinePrinter" ))
|
else if (!strcasecmp( Type, "LinePrinter" ))
|
||||||
{
|
{
|
||||||
if ((Name = (char*)TempMember->GetMemStr( "Port/Name", NULL ))) {
|
if ((Name = (char*)TempMember->GetChStr( "Port/Name", NULL ))) {
|
||||||
sprintf( Path, "Address/%s/Address", Name );
|
sprintf( Path, "Address/%s/Address", Name );
|
||||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get address list value
|
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get address list value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Address = (char*)TempMember->GetMemStr( "Port/Address", NULL, true ); // Get default value
|
Address = (char*)TempMember->GetChStr( "Port/Address", NULL, true ); // Get default value
|
||||||
}
|
}
|
||||||
SetLinePrinterHandle( Handle, Address );
|
SetLinePrinterHandle( Handle, Address );
|
||||||
}
|
}
|
||||||
else if (!strcasecmp( Type, "UNIXserver" ))
|
else if (!strcasecmp( Type, "UNIXserver" ))
|
||||||
{
|
{
|
||||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||||
sprintf( Path, "Address/%s/Address", Name );
|
sprintf( Path, "Address/%s/Address", Name );
|
||||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||||
}
|
}
|
||||||
SetUnixHandle( Handle, ctUNIXserver, Address );
|
SetUnixHandle( Handle, ctUNIXserver, Address );
|
||||||
}
|
}
|
||||||
else if (!strcasecmp( Type, "UNIXclient" ))
|
else if (!strcasecmp( Type, "UNIXclient" ))
|
||||||
{
|
{
|
||||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||||
sprintf( Path, "Address/%s/Address", Name );
|
sprintf( Path, "Address/%s/Address", Name );
|
||||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||||
}
|
}
|
||||||
SetUnixHandle( Handle, ctUNIXclient, Address );
|
SetUnixHandle( Handle, ctUNIXclient, Address );
|
||||||
}
|
}
|
||||||
else if (!strcasecmp( Type, "UDPserver" ))
|
else if (!strcasecmp( Type, "UDPserver" ))
|
||||||
{
|
{
|
||||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||||
sprintf( Path, "Address/%s/Address", Name );
|
sprintf( Path, "Address/%s/Address", Name );
|
||||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||||
sprintf( Path, "Address/%s/Port", Name );
|
sprintf( Path, "Address/%s/Port", Name );
|
||||||
Port = (char*)DataTree->GetMemStr( Path, "0", true ); // Get AddressList Port value
|
Port = (char*)DataTree->GetChStr( Path, "0", true ); // Get AddressList Port value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||||
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port value
|
Port = (char*)TempMember->GetChStr( "Socket/Port", "0", true ); // Get default Port value
|
||||||
}
|
}
|
||||||
Delay = TempMember->GetMemInt( "Socket/ResolveDelay", 0, true );
|
Delay = TempMember->GetChInt( "Socket/ResolveDelay", 0, true );
|
||||||
SetSocketHandle( Handle, ctUDPserver, Address, strlcase(Port), Delay );
|
SetSocketHandle( Handle, ctUDPserver, Address, strlcase(Port), Delay );
|
||||||
}
|
}
|
||||||
else if (!strcasecmp( Type, "UDPclient" ))
|
else if (!strcasecmp( Type, "UDPclient" ))
|
||||||
{
|
{
|
||||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||||
sprintf( Path, "Address/%s/Address", Name );
|
sprintf( Path, "Address/%s/Address", Name );
|
||||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||||
sprintf( Path, "Address/%s/Port", Name );
|
sprintf( Path, "Address/%s/Port", Name );
|
||||||
Port = (char*)DataTree->GetMemStr( Path, "0", true ); // Get AddressList Port value
|
Port = (char*)DataTree->GetChStr( Path, "0", true ); // Get AddressList Port value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||||
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port value
|
Port = (char*)TempMember->GetChStr( "Socket/Port", "0", true ); // Get default Port value
|
||||||
}
|
}
|
||||||
Delay = TempMember->GetMemInt( "Socket/ResolveDelay", 0, true );
|
Delay = TempMember->GetChInt( "Socket/ResolveDelay", 0, true );
|
||||||
SetSocketHandle( Handle, ctUDPclient, Address, strlcase(Port), Delay );
|
SetSocketHandle( Handle, ctUDPclient, Address, strlcase(Port), Delay );
|
||||||
}
|
}
|
||||||
else if (!strcasecmp( Type, "TCPserver" ))
|
else if (!strcasecmp( Type, "TCPserver" ))
|
||||||
{
|
{
|
||||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||||
sprintf( Path, "Address/%s/Address", Name );
|
sprintf( Path, "Address/%s/Address", Name );
|
||||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||||
sprintf( Path, "Address/%s/Port", Name );
|
sprintf( Path, "Address/%s/Port", Name );
|
||||||
Port = (char*)DataTree->GetMemStr( Path, "0", true ); // Get AddressList Port value
|
Port = (char*)DataTree->GetChStr( Path, "0", true ); // Get AddressList Port value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||||
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port value
|
Port = (char*)TempMember->GetChStr( "Socket/Port", "0", true ); // Get default Port value
|
||||||
}
|
}
|
||||||
Delay = TempMember->GetMemInt( "Socket/ResolveDelay", 0, true );
|
Delay = TempMember->GetChInt( "Socket/ResolveDelay", 0, true );
|
||||||
SetSocketHandle( Handle, ctTCPserver, Address, strlcase(Port), Delay );
|
SetSocketHandle( Handle, ctTCPserver, Address, strlcase(Port), Delay );
|
||||||
}
|
}
|
||||||
else if (!strcasecmp( Type, "TCPclient" ))
|
else if (!strcasecmp( Type, "TCPclient" ))
|
||||||
{
|
{
|
||||||
if ((Name = (char*)TempMember->GetMemStr( "Socket/Name", NULL ))) {
|
if ((Name = (char*)TempMember->GetChStr( "Socket/Name", NULL ))) {
|
||||||
sprintf( Path, "Address/%s/Address", Name );
|
sprintf( Path, "Address/%s/Address", Name );
|
||||||
Address = (char*)DataTree->GetMemStr( Path, NULL, true ); // Get AddressList Address value
|
Address = (char*)DataTree->GetChStr( Path, NULL, true ); // Get AddressList Address value
|
||||||
sprintf( Path, "Address/%s/Port", Name );
|
sprintf( Path, "Address/%s/Port", Name );
|
||||||
Port = (char*)DataTree->GetMemStr( Path, "0", true ); // Get AddressList Port value
|
Port = (char*)DataTree->GetChStr( Path, "0", true ); // Get AddressList Port value
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Address = (char*)TempMember->GetMemStr( "Socket/Address", NULL, true ); // Get default Address value
|
Address = (char*)TempMember->GetChStr( "Socket/Address", NULL, true ); // Get default Address value
|
||||||
Port = (char*)TempMember->GetMemStr( "Socket/Port", "0", true ); // Get default Port value
|
Port = (char*)TempMember->GetChStr( "Socket/Port", "0", true ); // Get default Port value
|
||||||
}
|
}
|
||||||
Delay = TempMember->GetMemInt( "Socket/ResolveDelay", 0, true );
|
Delay = TempMember->GetChInt( "Socket/ResolveDelay", 0, true );
|
||||||
SetSocketHandle( Handle, ctTCPclient, Address, strlcase(Port), Delay );
|
SetSocketHandle( Handle, ctTCPclient, Address, strlcase(Port), Delay );
|
||||||
}
|
}
|
||||||
else if (!strcasecmp( Type, "ForkPipe" )) {
|
else if (!strcasecmp( Type, "ForkPipe" )) {
|
||||||
Address = (char*)TempMember->GetMemStr( "Fork/ExecPath", NULL, true ); // Get default value
|
Address = (char*)TempMember->GetChStr( "Fork/ExecPath", NULL, true ); // Get default value
|
||||||
SetForkPipeHandle( Handle, Address );
|
SetForkPipeHandle( Handle, Address );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set Auto Mange
|
// Set Auto Mange
|
||||||
SetAutoManage( Handle, TempMember->GetMemBool( "AutoManage/Enabled", true, true ),
|
SetAutoManage( Handle, TempMember->GetChBool( "AutoManage/Enabled", true, true ),
|
||||||
TempMember->GetMemBool( "AutoManage/Persistent", false, true ),
|
TempMember->GetChBool( "AutoManage/Persistent", false, true ),
|
||||||
TempMember->GetMemInt( "AutoManage/ReopenDelay", 2000, true ),
|
TempMember->GetChInt( "AutoManage/ReopenDelay", 2000, true ),
|
||||||
TempMember->GetMemInt( "AutoManage/CloseTimeout", 2000, true ));
|
TempMember->GetChInt( "AutoManage/CloseTimeout", 2000, true ));
|
||||||
|
|
||||||
// Input buffer
|
// Input buffer
|
||||||
SetInBuffer( Handle, TempMember->GetMemInt( "InputBuffer/Size", 0 ),
|
SetInBuffer( Handle, TempMember->GetChInt( "InputBuffer/Size", 0 ),
|
||||||
TempMember->GetMemInt( "InputBuffer/Timeout", 250 ),
|
TempMember->GetChInt( "InputBuffer/Timeout", 250 ),
|
||||||
TempMember->GetMemStr( "InputBuffer/Marker", "" ),
|
TempMember->GetChStr( "InputBuffer/Marker", "" ),
|
||||||
TempMember->GetMemInt( "InputBuffer/MarkerLen", 0 ) );
|
TempMember->GetChInt( "InputBuffer/MarkerLen", 0 ) );
|
||||||
SetOutBuffer( Handle, TempMember->GetMemInt( "OutputBuffer/Size", 0 ) );
|
SetOutBuffer( Handle, TempMember->GetChInt( "OutputBuffer/Size", 0 ) );
|
||||||
|
|
||||||
// Next
|
// Next
|
||||||
TempMember = TempMember->GetNextPeer();
|
TempMember = TempMember->GetNextPeer();
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ bool CWatchdogCore::LoadConfigData()
|
|||||||
CSelectableCore::LoadConfigData();
|
CSelectableCore::LoadConfigData();
|
||||||
|
|
||||||
// Set specific parameters
|
// Set specific parameters
|
||||||
SetInterval( ConfigMember->GetMemInt( "Parameters/PingInterval", 500, true ));
|
SetInterval( ConfigMember->GetChInt( "Parameters/PingInterval", 500, true ));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user