Initial commit
[remote/remote-mci.git] / diku_mcs / moteserver.cc
blobcf69b01fb294b63896909b7383c5a57a2bb2a458
1 #include "FileDescriptor.h"
2 #include "SessionListener.h"
3 #include "HostListener.h"
4 #include "database.h"
5 #include "Configuration.h"
6 #include "MMSException.h"
7 #include "macros.h"
8 #include <exception>
9 #include <unistd.h>
11 namespace mms = remote;
12 using namespace mms;
13 using namespace mms::diku_mcs;
15 int main(int argc,char** argv)
17 Configuration::read(argc,argv);
18 if (Configuration::vm["daemonize"].as<int>())
20 printf("Daemonizing!\n");
21 if (fork()) exit(0);
22 setsid();
23 fclose(stdin);
24 close(1);
25 // reopen stdout
26 if (NULL == freopen(Configuration::vm["log-file"].as<std::string>().c_str(),"a",stdout))
28 fprintf(stderr,"Unable to open file %s for logging! Bailing out!\n",Configuration::vm["log-file"].as<std::string>().c_str());
29 return -1;
31 if (NULL == freopen(Configuration::vm["errorlog-file"].as<std::string>().c_str(),"a",stderr))
33 return -1;
37 log("Starting mote server\n");
39 while (1)
41 // try
42 // {
43 dbConn.connect( Configuration::vm["dbName"].as<std::string>(),
44 Configuration::vm["dbHost"].as<std::string>(),
45 Configuration::vm["dbUser"].as<std::string>(),
46 Configuration::vm["dbPassword"].as<std::string>());
47 log("Connected to database\n");
48 Mote::resetDb();
49 log("Deleted old mote data\n");
50 Session::resetDb();
51 log("Deleted old session data\n");
52 HostListener hostListener(Configuration::vm["hostListenerPort"].as<unsigned int>());
53 SessionListener sessionListener(Configuration::vm["sessionListenerPort"].as<unsigned int>());
54 log("Entering service loop\n");
55 FileDescriptor::serviceLoop();
56 /* }
57 catch (std::exception e)
59 log("Caught exception: %s - restarting listeners in 30 seconds\n",e.what());
60 usleep(30000000);
61 }*/