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