/[projects]/smsdaemon/SmsDaemon.cpp
ViewVC logotype

Annotation of /smsdaemon/SmsDaemon.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 675 - (hide annotations) (download)
Tue Apr 27 20:07:12 2010 UTC (14 years ago) by torben
File size: 3070 byte(s)
Added basic infra structure for an embedded http engine
1 torben 88 #include "SmsDaemon.h"
2    
3     #include <string>
4    
5     #include <sstream>
6 torben 132 #include <stdlib.h>
7    
8 torben 158 #include "Common.h"
9 torben 88
10 torben 149 #include "ISmsTransceiver.h"
11 torben 88
12     #include "Plugin.h"
13     #include "kbhit.h"
14    
15 torben 158 #include "Util.h"
16 torben 88
17 torben 92 #include "TaskManager.h"
18     #include "PluginManager.h"
19 torben 151 #include "ConfigFile.h"
20 torben 157 #include "Logger.h"
21 torben 217 #include "AccessManager.h"
22 torben 675 #include "embedded-http/embeddedhttp.h"
23 torben 92
24 torben 94 #include "version.h"
25    
26 torben 675
27 torben 88 using namespace std;
28    
29     void SmsDaemon::CreateLogMessage(SMS& sms,bool hasPlugin)
30     {
31     ostringstream os;
32 torben 142 os << "Recieved sms from " << sms.GetSender() << " ; command=" << sms.ExtractCommand();
33 torben 88 if (!hasPlugin)
34     os << " -- PLUGIN NOT FOUND";
35    
36 torben 157 Logger::logMessage(os.str());
37 torben 88 }
38    
39    
40     void SmsDaemon::CheckSms()
41     {
42 torben 128 const int INTERVAL = 1000; //no of milliseconds between sms checks
43 torben 95 timeval now = Util::GetTimeOfDay();
44    
45     if ( Util::mTimeDiff(_lastSmsCheck,now) < INTERVAL)
46     return;
47    
48     _lastSmsCheck = now;
49    
50 torben 88 Common* cmn = Common::instance();
51    
52 torben 92 PluginManager* manager = cmn->GetPluginManager();
53 torben 88 vector<SMS> sms = _modem.ReadSms();
54    
55     for (unsigned int i=0; i<sms.size(); ++i)
56     {
57 torben 142 string cmd = sms[i].ExtractCommand();
58 torben 196
59 torben 88 cmd = Util::str_tolower(cmd);
60    
61 torben 92 Plugin* pl = manager->GetPlugin(cmd);
62 torben 88
63     CreateLogMessage(sms[i], pl != 0);
64    
65     if (pl)
66     {
67     pl->Execute(_modem, sms[i]);
68     }
69     else
70     {
71 torben 142 _modem.SendSms(sms[i].GetSender(), "Unknown command!", false);
72 torben 88 }
73    
74     cmn->smsCounter.incomming++;
75     }
76     }
77    
78    
79     void SmsDaemon::MainLoop()
80     {
81     Common* cmn = Common::instance();
82     volatile bool& mainContinue = cmn->mainContinue;
83 torben 208 volatile bool& reloadConfig = cmn->reloadConfig;
84 torben 88
85     mainContinue = true;
86    
87     while (mainContinue)
88     {
89    
90 torben 128 CheckSms();
91 torben 88
92 torben 128 cmn->GetTaskManager()->ExecuteTasks(_modem);
93 torben 88
94     if (cmn->isDebug && kbhit())
95     break;
96    
97 torben 208 if (reloadConfig)
98     ReloadConfig();
99    
100 torben 128 Util::Sleep(100);
101 torben 88
102     }
103     }
104    
105 torben 208 void SmsDaemon::ReloadConfig()
106     {
107     Common* cmn = Common::instance();
108     cmn->reloadConfig = false;
109    
110     cmn->GetConfigfile()->Reload();
111    
112     cmn->GetPluginManager()->DestroyPlugins();
113     cmn->GetPluginManager()->LoadPlugins();
114    
115     cmn->GetTaskManager()->DestroyTasks();
116     cmn->GetTaskManager()->LoadTasks();
117    
118 torben 217 AccessManager::Load(); //reload blaclist & privileged list
119 torben 208 }
120    
121 torben 88 void SmsDaemon::Start()
122     {
123     Common* cmn = Common::instance();
124 torben 151 string transceiver = cmn->GetConfigfile()->GetValue("smsdaemon","transceiver");
125 torben 88
126 torben 132 srand(time(0));
127 torben 88
128     cmn->daemonStart = time(0);
129 torben 95 _lastSmsCheck = Util::GetTimeOfDay();
130 torben 88
131 torben 157 Logger::logMessage("--------------------------------");
132     Logger::logMessage( VERSION );
133     Logger::logMessage( SVNVERSION );
134     Logger::logMessage( string("Transceiver: ") + transceiver );
135 torben 88
136 torben 217 AccessManager::Load(); //reload blaclist & privileged list
137 torben 92 cmn->GetTaskManager()->LoadTasks();
138     cmn->GetPluginManager()->LoadPlugins();
139 torben 157 Logger::logMessage("SMS daemon started");
140 torben 88
141 torben 675 embeddedHttp = new EmbeddedHttp();
142     embeddedHttp->startServer();
143 torben 216
144 torben 88 try
145     {
146     MainLoop();
147     }
148     catch (std::exception& e)
149     {
150 torben 157 Logger::logMessage( e.what() );
151 torben 88 }
152     catch (...)
153     {
154 torben 157 Logger::logMessage( "Caught unknown exception" );
155 torben 88 }
156    
157 torben 675 embeddedHttp->stopServer();
158    
159 torben 205 cmn->GetPluginManager()->DestroyPlugins();
160    
161 torben 157 Logger::logMessage( cmn->getStatusMessage() );
162 torben 88 }

  ViewVC Help
Powered by ViewVC 1.1.20