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