
#ifndef _REMOTEAGENTDRIVER_H
#define _REMOTEAGENTDRIVER_H

#include "LayeredControlIF.h"
#include "ModemBroker.h"
#include "MMRecipient.h"

class ModemMessage;

class RemoteAgentDriver :  public MMRecipient
{
public:
	RemoteAgentDriver();
	~RemoteAgentDriver();

	// Overrides.
	virtual int init();
	virtual void run();

	// queues a copy of message to send it out
	static void send(ModemMessage* pMM);

	static RemoteAgentDriver* getRemoteAgentDriver();

	// Sort the messages
	void receive(const ModemMessage* pMessage);

	void sendActiveBehavior();

protected:
	static RemoteAgentDriver* _gpRemoteAgentDriver;

	virtual int spawnAuxTasks( void ) {return 1;};

	ModemBroker* _modemBroker;

	const char* _remoteSocketIP;   // text version of the target socket IP
	const char* _serialPort1;      // serial port for serial modem 1
	const char* _serialPort2;      // serial port for serial modem 2
	long _baudRate1;	       // baud rate for serial modem 1
	long _baudRate2;	       // baud rate for serial modem 2

	long m_count;
	int  m_speed;

	long _connectionSpeed;

	LayeredControlIF* m_layeredControl;

	typedef void (RemoteAgentDriver::* rF)();
	typedef void (RemoteAgentDriver::* hF)(ModemMessage* mm);

	rF m_requestFunctionList[66];
	hF m_handleFunctionList[66];

	void handleRequest(ModemMessage*);
};

#endif



