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

Contents of /smsdaemon/SmsDaemon.cpp

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20