#include "DeviceServer.h"
extern "C"
void handler(int sig)
{
rdaDeviceServerBase::shutDown(sig);
}
int main(int argc, char** argv)
{
const char* serverName = 0;
rdaLogger::LogLevel traceLevel = rdaLogger::LOG_OFF;
if (argc > 1)
{
serverName = argv[1];
if (argc > 2)
{
if (rdaLogger::stringToLevel(traceLevel, argv[2]) == false)
{
printf("Invalid trace level '%s'\n", argv[2]);
return 1;
}
}
}
else
{
printf("Usage: deviceServer <server name> [trace level]\n");
return 1;
}
struct sigaction sa;
sa.sa_handler = handler;
sigfillset(&sa.sa_mask);
#ifdef __Lynx__
sa.sa_flags = 0 | SA_NOABORT;
#else
sa.sa_flags = 0 | SA_RESTART;
#endif
if (sigaction(SIGINT, &sa, (struct sigaction*) 0) == -1)
{
printf("Can't set signal handler for SIGINT\n");
return 1;
}
rdaLogger::init();
logger = rdaLogger::getLogger("dev.example");
logger->setLevel(traceLevel);
rdaDeviceServerBase::getGlobalLogger()->setLevel(traceLevel);
rdaDeviceServerBase::getClientsLogger()->setLevel(traceLevel);
rdaDeviceServerBase::getCallsLogger()->setLevel(traceLevel);
rdaDeviceServerBase::getSubscriptionsLogger()->setLevel(traceLevel);
try
{
rdaDeviceServerBase::init(argc, argv);
DeviceServer theServer(serverName);
theServer.runServer();
}
catch(const rdaInternalException& ex)
{
printf("RDA internal exception: %s\n", ex.getMessage());
return 1;
}
catch(const rdaInternalError& ex)
{
printf("RDA internal error [%s:%d]: %s\n",
ex.getFile(), ex.getLine(), ex.getMessage());
return 1;
}
catch(...)
{
printf("Unknown exception in main\n");
return 1;
}
rdaLogger::destroy();
return 0;
}