version 0.1.10
[fms.git] / src / main.cpp
index 8746da2..17d6b67 100644 (file)
 #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
        #ifdef XMEM\r
                xmem_disable_print();\r
        #endif\r
 \r
-       std::vector<PThread::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
+               }\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
+       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
+       MainFunction();\r
+\r
+       return 0;\r
+}\r
 \r
+void MainFunction()\r
+{\r
        srand(time(NULL));\r
 \r
        SetupDB();\r
@@ -27,21 +119,12 @@ int main()
 \r
        LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_INFO,"FMS startup v"FMS_VERSION);\r
 \r
+       ThreadController::Instance()->StartThreads();\r
 \r
-       StartThreads(threads);\r
-\r
-\r
-       //ZThread::Thread commandthread(new CommandThread());\r
-       PThread::Thread commandthread(new CommandThread());\r
-       commandthread.Join();\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