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