#include "Aria.h"
class ConnHandler
{
public:
ConnHandler(ArRobot *robot);
~ConnHandler(void) {}
void connected(void);
void connectionFailed(void);
void disconnected(void);
void connectionLost(void);
protected:
ArRobot *myRobot;
ArFunctorC<ConnHandler> myConnectedCB;
ArFunctorC<ConnHandler> myConnFailCB;
ArFunctorC<ConnHandler> myDisconnectedCB;
ArFunctorC<ConnHandler> myConnLostCB;
};
ConnHandler::ConnHandler(ArRobot *robot) :
myConnectedCB(this, &ConnHandler::connected),
myConnFailCB(this, &ConnHandler::connectionFailed),
myDisconnectedCB(this, &ConnHandler::disconnected),
myConnLostCB(this, &ConnHandler::connectionLost)
{
myRobot = robot;
myRobot->addConnectCB(&myConnectedCB, ArListPos::FIRST);
myRobot->addFailedConnectCB(&myConnFailCB, ArListPos::FIRST);
myRobot->addDisconnectNormallyCB(&myDisconnectedCB, ArListPos::FIRST);
myRobot->addDisconnectOnErrorCB(&myDisconnectedCB, ArListPos::FIRST);
}
void ConnHandler::connectionFailed(void)
{
ArLog::log(ArLog::Normal, "ConnHandler: Connection failed. Exiting the program.");
exit(1);
}
void ConnHandler::connected(void)
{
ArLog::log(ArLog::Normal, "ConnHandler: Connected. Turning off sonar,");
myRobot->comInt(ArCommands::SONAR, 0);
myRobot->comInt(ArCommands::SOUNDTOG, 0);
}
void ConnHandler::disconnected(void)
{
ArLog::log(ArLog::Normal, "ConnHandler: Connection closed. Exiting the program.");
exit(0);
}
void ConnHandler::connectionLost(void)
{
ArLog::log(ArLog::Normal, "ConnHandler: Lost connection due to an error! Exiting the program!");
exit(1);
}
int main(int argc, char **argv)
{
Aria::init();
ArRobot robot;
ArArgumentParser argParser(&argc, argv);
ArSimpleConnector con(&argParser);
if(!Aria::parseArgs() || !argParser.checkHelpAndWarnUnparsed())
{
Aria::logOptions();
return 1;
}
ConnHandler ch(&robot);
con.connectRobot(&robot);
robot.runAsync(true);
ArLog::log(ArLog::Normal, "Sleeping for 10 seconds...");
ArUtil::sleep(10000);
ArLog::log(ArLog::Normal, "...requesting that the robot thread exit, then shutting down ARIA and exiting.");
robot.stopRunning();
Aria::shutdown();
return 0;
}