Files
redAcore/WatchdogCore.cpp
Charl Wentzel 4c6f971a7d Important update:
- Bug fix: start/end char for Watchdog protocol
2017-11-21 11:40:30 +02:00

96 lines
2.3 KiB
C++

/*
* WatchdogCore.cpp
*
* Created on: July 2017
* Author: wentzelc
*/
// Standard C/C++ Libraries
/* none */
// redA Libraries
#include "ApplicationCore.h"
#include "WatchdogCore.h"
//---------------------------------------------------------------------------
// Global vars
extern char * ProcessName;
//extern CApplication * Application;
//---------------------------------------------------------------------------
CWatchdogCore::CWatchdogCore( const char * pName ) :
CSelectableCore( pName, "WatchdogClient" )
{
// Create protocol
Protocol = new CLiteProtocol( 50, '\x02', '\x03', '\x00' );
Protocol->CreateCommand( ProcessName, "watchdog", "ping" );
// Start timer
PingInterval = 500;
SetStartTime( &PingTimer );
// Handle
Ping = NULL;
}
//---------------------------------------------------------------------------
CWatchdogCore::~CWatchdogCore()
{
// Destroy Protocol
if (Protocol)
delete Protocol;
}
//---------------------------------------------------------------------------
bool CWatchdogCore::LoadConfigData()
{
// Call Previous load config
CSelectableCore::LoadConfigData();
// Set Auto Mange
SetInterval( DataTree->GetInt( ConfigMember, "Parameters/PingInterval", 500, true ));
return true;
}
//---------------------------------------------------------------------------
bool CWatchdogCore::SetInterval( int pPingInterval )
{
PingInterval = pPingInterval;
return true;
}
//---------------------------------------------------------------------------
bool CWatchdogCore::Init()
{
// Create handle and set reference, if not done
if (!(Ping = GetHandle( "Ping" )))
Ping = CreateHandle( "Ping", false );
// Previous init
return CSelectableCore::Init();
}
//---------------------------------------------------------------------------
bool CWatchdogCore::Process()
{
// Manage socket connections
CSelectableCore::Process();
// Watchdog ping
if (Timeout( PingTimer, PingInterval ))
{
// Send command
InputHandle( Ping, Protocol->GetCommandStr(), Protocol->GetCommandLen() );
// Reset timer
SetStartTime( &PingTimer );
}
return false;
}
//---------------------------------------------------------------------------