// LrsConnectionStatus.cpp: implementation of the LrsConnectionStatus class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "lrsconnectionstatus.h"
#include "client.h"

LrsConnectionStatus *LrsConnectionStatus::_pInstance = 0;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

// Constructor.  
LrsConnectionStatus::LrsConnectionStatus() {
		_startTime = 0;
		_client = 0;
		_connect = 0;
}	
// Destructor
LrsConnectionStatus::~LrsConnectionStatus() {
	if(_pInstance != 0)
		delete _pInstance;
}
// Returns LrsConnectionStatus singleton instance
LrsConnectionStatus *LrsConnectionStatus::instance() {
	if( _pInstance == 0)
		_pInstance = new LrsConnectionStatus();
	return _pInstance;
}
// init private variable <_client> and start elapsed connection
// clock if client connected
void LrsConnectionStatus::init(CLrsClient *client) {
	_client = client;
	if(isConnected())
		_startTime = clock(); //init start time to now
}
// Returns elapsed connection time in seconds
int LrsConnectionStatus::elapsedConnectTime() {
	
	// if bogus client variable, cannot get connection status
	if(!_client)
		return 0;
	
	if(isConnected()) {
		if(_startTime) // calculate elapsed time in seconds
			return (int) (clock() - _startTime)/CLK_TCK;
		else //reinit start time in case not initialized
			_startTime = clock(); 
	}
		
	return 0;
}
// Returns elapsed time target application has been on in clock ticks
int LrsConnectionStatus::elapsedOnTime() {

	if(!_client || !isConnected())
		return 0;

	ACE_TRY 
	{

	if(_client->_interfaceClient._lrsapp)
		return _client->_interfaceClient._lrsapp->elapsedTime();

	}
	ACE_CATCHANY
	{
		ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,"Unexpected exception\n");
		// Connection must of dropped out; shutdown client
		_client->shutdown();		
	}
	ACE_ENDTRY;
	
	return 0;

}

BOOL LrsConnectionStatus::isConnected()
{
	return _connect;
}

void LrsConnectionStatus::set(BOOL connectstate)
{	
	_connect = connectstate;

	if(_connect)
		_startTime = clock(); 
	else 
		_startTime = 0;		
}
