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

@@ -65,8 +65,8 @@ CSelectableCore::~CSelectableCore()
bool CSelectableCore::LoadConfigData()
{
TDataMember * TempMember;
TDataMember * SerialConfig;
CDataMember * TempMember;
CDataMember * SerialConfig;
THandle * Handle;
char * Type;
char * Name;
@@ -83,33 +83,35 @@ bool CSelectableCore::LoadConfigData()
CFunctionCore::LoadConfigData();
// Load Handles
TempMember = DataTree->GetFirstChild( DataTree->GetMember( ConfigMember, "Handles", false ) );
if ((TempMember = ConfigMember->GetMember( "Handles", false ))) {
TempMember = TempMember->GetFirstChild();
}
while (TempMember)
{
// Check if name is valid
if (!TempMember->Name || !*TempMember->Name)
if (!TempMember->GetName() || !*TempMember->GetName())
continue;
// Create Handle and channel link
Handle = CreateHandle( TempMember->Name, false );
Handle->Channel = GetChannel( DataTree->GetStr( TempMember, "Channel" ) );
Handle = CreateHandle( TempMember->GetName(), false );
Handle->Channel = GetChannel( TempMember->GetChildStr( "Channel" ) );
Type = (char*)DataTree->GetStr( TempMember, "Type", "TCPclient", true );
Type = (char*)TempMember->GetChildStr( "Type", "TCPclient", true );
if (!strcasecmp( Type, "Serial" ))
{
if ((Name = (char*)DataTree->GetStr( TempMember, "Port/Name", NULL ))) {
if ((Name = (char*)TempMember->GetChildStr( "Port/Name", NULL ))) {
sprintf( Path, "Address/%s/Address", Name );
Address = (char*)DataTree->GetStr( NULL, Path, Address, true ); // Get address list value
Address = (char*)DataTree->GetChildStr( Path, NULL, true ); // Get address list value
}
else {
Address = (char*)DataTree->GetStr( TempMember, "Port/Address", NULL, true ); // Get default value
Address = (char*)TempMember->GetChildStr( "Port/Address", NULL, true ); // Get default value
}
SetSerialHandle( Handle, Address );
// Update configuration if specified
if ((SerialConfig = DataTree->GetMember( TempMember, "Port/SerialConfig", false )))
if ((SerialConfig = TempMember->GetMember( "Port/SerialConfig", false )))
{
ParityText = (char*)DataTree->GetStr( SerialConfig, "Parity", "none", true );
ParityText = (char*)SerialConfig->GetChildStr( "Parity", "none", true );
if (!strcasecmp( ParityText, "none" ))
Parity = NO_PARITY;
else if (!strcasecmp( ParityText, "odd" ))
@@ -119,7 +121,7 @@ bool CSelectableCore::LoadConfigData()
else if (!strcasecmp( ParityText, "mark" ))
Parity = MARK_PARITY;
FlowCtrlText = (char*)DataTree->GetStr( SerialConfig, "FlowCtrl", "none", true );
FlowCtrlText = (char*)SerialConfig->GetChildStr( "FlowCtrl", "none", true );
if (!strcasecmp( FlowCtrlText, "none" ))
FlowCtrl = NO_FLOWCTRL;
else if (!strcasecmp( FlowCtrlText, "hardware" ))
@@ -128,73 +130,73 @@ bool CSelectableCore::LoadConfigData()
FlowCtrl = SW_FLOWCTRL;
Handle->SerialConfig = true;
SetSerialHandleConfig( Handle, DataTree->GetInt( SerialConfig, "BaudRate", 19200, true ),
DataTree->GetInt( SerialConfig, "DataBits", 8, true ),
Parity, DataTree->GetInt( SerialConfig, "StopBits", 1, true ),
FlowCtrl, DataTree->GetInt( SerialConfig, "DataWait", 0, true ));
SetSerialHandleConfig( Handle, SerialConfig->GetChildInt( "BaudRate", 19200, true ),
SerialConfig->GetChildInt( "DataBits", 8, true ),
Parity, SerialConfig->GetChildInt( "StopBits", 1, true ),
FlowCtrl, SerialConfig->GetChildInt( "DataWait", 0, true ));
}
}
else if (!strcasecmp( Type, "LinePrinter" ))
{
if ((Name = (char*)DataTree->GetStr( TempMember, "Port/Name", NULL ))) {
if ((Name = (char*)TempMember->GetChildStr( "Port/Name", NULL ))) {
sprintf( Path, "Address/%s/Address", Name );
Address = (char*)DataTree->GetStr( NULL, Path, NULL, true ); // Get address list value
Address = (char*)DataTree->GetChildStr( Path, NULL, true ); // Get address list value
}
else {
Address = (char*)DataTree->GetStr( TempMember, "Port/Address", NULL, true ); // Get default value
Address = (char*)TempMember->GetChildStr( "Port/Address", NULL, true ); // Get default value
}
SetLinePrinterHandle( Handle, Address );
}
else if (!strcasecmp( Type, "TCPserver" ))
{
if ((Name = (char*)DataTree->GetStr( TempMember, "Socket/Name", NULL ))) {
if ((Name = (char*)TempMember->GetChildStr( "Socket/Name", NULL ))) {
sprintf( Path, "Address/%s/Address", Name );
Address = (char*)DataTree->GetStr( NULL, Path, NULL, true ); // Get AddressList Address value
Address = (char*)DataTree->GetChildStr( Path, NULL, true ); // Get AddressList Address value
sprintf( Path, "Address/%s/Port", Name );
Port = (char*)DataTree->GetStr( NULL, Path, "0", true ); // Get AddressList Port value
Port = (char*)DataTree->GetChildStr( Path, "0", true ); // Get AddressList Port value
}
else {
Address = (char*)DataTree->GetStr( TempMember, "Socket/Address", NULL, true ); // Get default Address value
Port = (char*)DataTree->GetStr( TempMember, "Socket/Port", "0", true ); // Get default Port value
Address = (char*)TempMember->GetChildStr( "Socket/Address", NULL, true ); // Get default Address value
Port = (char*)TempMember->GetChildStr( "Socket/Port", "0", true ); // Get default Port value
}
Delay = DataTree->GetInt( TempMember, "Socket/ResolveDelay", 0, true );
Delay = TempMember->GetChildInt( "Socket/ResolveDelay", 0, true );
SetSocketHandle( Handle, ctServer, Address, strlcase(Port), Delay );
}
else if (!strcasecmp( Type, "TCPclient" ))
{
if ((Name = (char*)DataTree->GetStr( TempMember, "Socket/Name", NULL ))) {
if ((Name = (char*)TempMember->GetChildStr( "Socket/Name", NULL ))) {
sprintf( Path, "Address/%s/Address", Name );
Address = (char*)DataTree->GetStr( NULL, Path, NULL, true ); // Get AddressList Address value
Address = (char*)DataTree->GetChildStr( Path, NULL, true ); // Get AddressList Address value
sprintf( Path, "Address/%s/Port", Name );
Port = (char*)DataTree->GetStr( NULL, Path, "0", true ); // Get AddressList Port value
Port = (char*)DataTree->GetChildStr( Path, "0", true ); // Get AddressList Port value
}
else {
Address = (char*)DataTree->GetStr( TempMember, "Socket/Address", NULL, true ); // Get default Address value
Port = (char*)DataTree->GetStr( TempMember, "Socket/Port", "0", true ); // Get default Port value
Address = (char*)TempMember->GetChildStr( "Socket/Address", NULL, true ); // Get default Address value
Port = (char*)TempMember->GetChildStr( "Socket/Port", "0", true ); // Get default Port value
}
Delay = DataTree->GetInt( TempMember, "Socket/ResolveDelay", 0, true );
Delay = TempMember->GetChildInt( "Socket/ResolveDelay", 0, true );
SetSocketHandle( Handle, ctClient, Address, strlcase(Port), Delay );
}
else if (!strcasecmp( Type, "ForkPipe" )) {
Address = (char*)DataTree->GetStr( TempMember, "Fork/ExecPath", NULL, true ); // Get default value
Address = (char*)TempMember->GetChildStr( "Fork/ExecPath", NULL, true ); // Get default value
SetForkPipeHandle( Handle, Address );
}
// Set Auto Mange
SetAutoManage( Handle, DataTree->GetBool( TempMember, "AutoManage/Enabled", true, true ),
DataTree->GetBool( TempMember, "AutoManage/Persistent", false, true ),
DataTree->GetInt( TempMember, "AutoManage/ReopenDelay", 2000, true ),
DataTree->GetInt( TempMember, "AutoManage/CloseTimeout", 2000, true ));
SetAutoManage( Handle, TempMember->GetChildBool( "AutoManage/Enabled", true, true ),
TempMember->GetChildBool( "AutoManage/Persistent", false, true ),
TempMember->GetChildInt( "AutoManage/ReopenDelay", 2000, true ),
TempMember->GetChildInt( "AutoManage/CloseTimeout", 2000, true ));
// Input buffer
SetInBuffer( Handle, DataTree->GetInt( TempMember, "InputBuffer/Size", 0 ),
DataTree->GetInt( TempMember, "InputBuffer/Timeout", 250 ),
DataTree->GetStr( TempMember, "InputBuffer/Marker", "" ),
DataTree->GetInt( TempMember, "InputBuffer/MarkerLen", 0 ) );
SetOutBuffer( Handle, DataTree->GetInt( TempMember, "OutputBuffer/Size", 0 ) );
SetInBuffer( Handle, TempMember->GetChildInt( "InputBuffer/Size", 0 ),
TempMember->GetChildInt( "InputBuffer/Timeout", 250 ),
TempMember->GetChildStr( "InputBuffer/Marker", "" ),
TempMember->GetChildInt( "InputBuffer/MarkerLen", 0 ) );
SetOutBuffer( Handle, TempMember->GetChildInt( "OutputBuffer/Size", 0 ) );
// Next
TempMember = DataTree->GetNextChild( TempMember );
TempMember = TempMember->GetNextPeer();
}
return true;