version 0.2.2
[fms.git] / src / main.cpp
1 #include "../include/global.h"\r
2 #include "../include/commandthread.h"\r
3 #include "../include/threadcontroller.h"\r
4 \r
5 #include <ctime>\r
6 #include <csignal>\r
7 #include <iostream>\r
8 \r
9 #ifdef _WIN32\r
10         #include "../include/fmsservice.h"\r
11 #else\r
12         #include "../include/fmsdaemon.h"\r
13 #endif\r
14 \r
15 #ifdef XMEM\r
16         #include <xmem.h>\r
17 #endif\r
18 \r
19 int main(int argc, char *argv[])\r
20 {\r
21 \r
22         bool daemon=false;\r
23 \r
24         #ifdef XMEM\r
25                 xmem_disable_print();\r
26         #endif\r
27 \r
28         // check arguments\r
29         if(argc>1)\r
30         {\r
31                 #ifndef _WIN32\r
32                 if(argv[1] && strncmp(argv[1],"-d",2)==0)\r
33                 {\r
34                         Daemonize();\r
35                         daemon=true;\r
36                 }\r
37                 #else\r
38                 if(argv[1] && strncmp(argv[1],"-i",2)==0)\r
39                 {\r
40                         if(ServiceIsInstalled())\r
41                         {\r
42                                 std::cout << "FMS Service is already installed" << std::endl;\r
43                         }\r
44                         else\r
45                         {\r
46                                 if(ServiceInstall())\r
47                                 {\r
48                                         std::cout << "FMS Service Installed" << std::endl;\r
49                                 }\r
50                                 else\r
51                                 {\r
52                                         std::cout << "Error installing FMS Service" << std::endl;\r
53                                 }\r
54                         }\r
55                         return 0;\r
56                 }\r
57                 else if(argv[1] && strncmp(argv[1],"-u",2)==0)\r
58                 {\r
59                         if(ServiceIsInstalled())\r
60                         {\r
61                                 if(ServiceUninstall())\r
62                                 {\r
63                                         std::cout << "FMS Service uninstalled" << std::endl;\r
64                                 }\r
65                                 else\r
66                                 {\r
67                                         std::cout << "There was a problem uninstalling the service" << std::endl;\r
68                                 }\r
69                         }\r
70                         else\r
71                         {\r
72                                 std::cout << "FMS Service is not currently installed" << std::endl;\r
73                         }\r
74                         return 0;\r
75                 }\r
76                 else if(argv[1] && strncmp(argv[1],"-s",2)==0)\r
77                 {\r
78                         if(ServiceStart())\r
79                         {\r
80                         }\r
81                         else\r
82                         {\r
83                                 std::cout << "FMS Service could not be started at this time" << std::endl;\r
84                         }\r
85                         return 0;\r
86                 }\r
87                 #endif\r
88         }\r
89 \r
90         signal(SIGINT,SigHandler);\r
91         signal(SIGTERM,SigHandler);\r
92         signal(SIGABRT,SigHandler);\r
93 #ifdef _WIN32\r
94         signal(SIGBREAK,SigHandler);\r
95 #endif\r
96 \r
97         if(daemon==false)\r
98         {\r
99                 std::cout << "FMS Running in console mode." << std::endl;\r
100                 std::cout << "Use the administration pages, or CTRL+C to exit" << std::endl << std::endl;\r
101                 std::cout << "Available command line arguments:" << std::endl;\r
102         #ifdef _WIN32\r
103                 std::cout << "-i\tinstall service" << std::endl;\r
104                 std::cout << "-u\tuninstall service" << std::endl;\r
105         #else\r
106                 std::cout << "-d\trun as daemon" << std::endl;\r
107         #endif\r
108         }\r
109 \r
110         MainFunction();\r
111 \r
112         return 0;\r
113 }\r
114 \r
115 void MainFunction()\r
116 {\r
117         srand(time(NULL));\r
118 \r
119         SetupDB();\r
120         SetupDefaultOptions();\r
121 \r
122         SetupLogFile();\r
123 \r
124         SetupNetwork();\r
125 \r
126         LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_INFO,"FMS startup v"FMS_VERSION);\r
127 \r
128         ThreadController::Instance()->StartThreads();\r
129 \r
130         do\r
131         {\r
132                 PThread::Sleep(1000);\r
133         }while(!wantshutdown);\r
134 \r
135         Shutdown();\r
136 }\r