-#include "../include/identitytestglobal.h"\r
+#include "../include/global.h"\r
#include "../include/commandthread.h"\r
+#include "../include/threadcontroller.h"\r
\r
#include <ctime>\r
+#include <csignal>\r
+#include <iostream>\r
+\r
+#ifdef _WIN32\r
+ #include "../include/fmsservice.h"\r
+#else\r
+ #include "../include/fmsdaemon.h"\r
+#endif\r
\r
#ifdef XMEM\r
#include <xmem.h>\r
#endif\r
\r
-int main()\r
+int main(int argc, char *argv[])\r
{\r
\r
+ bool daemon=false;\r
+\r
#ifdef XMEM\r
xmem_disable_print();\r
#endif\r
\r
- std::vector<ZThread::Thread *> threads;\r
+ // check arguments\r
+ if(argc>1)\r
+ {\r
+ #ifndef _WIN32\r
+ if(argv[1] && strncmp(argv[1],"-d",2)==0)\r
+ {\r
+ Daemonize();\r
+ daemon=true;\r
+ }\r
+ #else\r
+ if(argv[1] && strncmp(argv[1],"-i",2)==0)\r
+ {\r
+ if(ServiceIsInstalled())\r
+ {\r
+ std::cout << "FMS Service is already installed" << std::endl;\r
+ }\r
+ else\r
+ {\r
+ if(ServiceInstall())\r
+ {\r
+ std::cout << "FMS Service Installed" << std::endl;\r
+ }\r
+ else\r
+ {\r
+ std::cout << "Error installing FMS Service" << std::endl;\r
+ }\r
+ }\r
+ return 0;\r
+ }\r
+ else if(argv[1] && strncmp(argv[1],"-u",2)==0)\r
+ {\r
+ if(ServiceIsInstalled())\r
+ {\r
+ if(ServiceUninstall())\r
+ {\r
+ std::cout << "FMS Service uninstalled" << std::endl;\r
+ }\r
+ else\r
+ {\r
+ std::cout << "There was a problem uninstalling the service" << std::endl;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ std::cout << "FMS Service is not currently installed" << std::endl;\r
+ }\r
+ return 0;\r
+ }\r
+ else if(argv[1] && strncmp(argv[1],"-s",2)==0)\r
+ {\r
+ if(ServiceStart())\r
+ {\r
+ }\r
+ else\r
+ {\r
+ std::cout << "FMS Service could not be started at this time" << std::endl;\r
+ }\r
+ return 0;\r
+ }\r
+ #endif\r
+ }\r
+\r
+ signal(SIGINT,SigHandler);\r
+ signal(SIGTERM,SigHandler);\r
+ signal(SIGABRT,SigHandler);\r
+#ifdef _WIN32\r
+ signal(SIGBREAK,SigHandler);\r
+#endif\r
\r
+ if(daemon==false)\r
+ {\r
+ std::cout << "FMS Running in console mode." << std::endl;\r
+ std::cout << "Use the administration pages, or CTRL+C to exit" << std::endl << std::endl;\r
+ std::cout << "Available command line arguments:" << std::endl;\r
+ #ifdef _WIN32\r
+ std::cout << "-i\tinstall service" << std::endl;\r
+ std::cout << "-u\tuninstall service" << std::endl;\r
+ #else\r
+ std::cout << "-d\trun as daemon" << std::endl;\r
+ #endif\r
+ }\r
+\r
+ MainFunction();\r
+\r
+ return 0;\r
+}\r
+\r
+void MainFunction()\r
+{\r
srand(time(NULL));\r
\r
SetupDB();\r
\r
SetupNetwork();\r
\r
- LogFile::instance()->WriteLog(LogFile::LOGLEVEL_INFO,"FMS startup v"FMS_VERSION);\r
-\r
- \r
- StartThreads(threads);\r
-\r
+ LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_INFO,"FMS startup v"FMS_VERSION);\r
\r
- ZThread::Thread commandthread(new CommandThread());\r
- commandthread.wait();\r
+ ThreadController::Instance()->StartThreads();\r
\r
+ do\r
+ {\r
+ PThread::Sleep(1000);\r
+ }while(!wantshutdown);\r
\r
- ShutdownThreads(threads);\r
-\r
- ShutdownNetwork();\r
-\r
- LogFile::instance()->WriteLog(LogFile::LOGLEVEL_INFO,"FMS shutdown");\r
- LogFile::instance()->WriteNewLine();\r
-\r
- return 0;\r
+ Shutdown();\r
}\r