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