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

Contents of /smsdaemon/SmsDaemon.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 217 - (show annotations) (download)
Tue Dec 23 14:20:43 2008 UTC (15 years, 4 months ago) by torben
File size: 2933 byte(s)
Solved ToDo item:
'- Create a filtering method:
-  Incoming: which phonenumbers are allowed to invoke which plugins
-  Incoming could be solved with a PluginProxy() which intercepts the ExecutePlugin calls (only 
PluginManager needs to know about this one)'

Move the Access related items to AccessManager.*


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
23 #include "version.h"
24
25 using namespace std;
26
27 void SmsDaemon::CreateLogMessage(SMS& sms,bool hasPlugin)
28 {
29 ostringstream os;
30 os << "Recieved sms from " << sms.GetSender() << " ; command=" << sms.ExtractCommand();
31 if (!hasPlugin)
32 os << " -- PLUGIN NOT FOUND";
33
34 Logger::logMessage(os.str());
35 }
36
37
38 void SmsDaemon::CheckSms()
39 {
40 const int INTERVAL = 1000; //no of milliseconds between sms checks
41 timeval now = Util::GetTimeOfDay();
42
43 if ( Util::mTimeDiff(_lastSmsCheck,now) < INTERVAL)
44 return;
45
46 _lastSmsCheck = now;
47
48 Common* cmn = Common::instance();
49
50 PluginManager* manager = cmn->GetPluginManager();
51 vector<SMS> sms = _modem.ReadSms();
52
53 for (unsigned int i=0; i<sms.size(); ++i)
54 {
55 string cmd = sms[i].ExtractCommand();
56
57 cmd = Util::str_tolower(cmd);
58
59 Plugin* pl = manager->GetPlugin(cmd);
60
61 CreateLogMessage(sms[i], pl != 0);
62
63 if (pl)
64 {
65 pl->Execute(_modem, sms[i]);
66 }
67 else
68 {
69 _modem.SendSms(sms[i].GetSender(), "Unknown command!", false);
70 }
71
72 cmn->smsCounter.incomming++;
73 }
74 }
75
76
77 void SmsDaemon::MainLoop()
78 {
79 Common* cmn = Common::instance();
80 volatile bool& mainContinue = cmn->mainContinue;
81 volatile bool& reloadConfig = cmn->reloadConfig;
82
83 mainContinue = true;
84
85 while (mainContinue)
86 {
87
88 CheckSms();
89
90 cmn->GetTaskManager()->ExecuteTasks(_modem);
91
92 if (cmn->isDebug && kbhit())
93 break;
94
95 if (reloadConfig)
96 ReloadConfig();
97
98 Util::Sleep(100);
99
100 }
101 }
102
103 void SmsDaemon::ReloadConfig()
104 {
105 Common* cmn = Common::instance();
106 cmn->reloadConfig = false;
107
108 cmn->GetConfigfile()->Reload();
109
110 cmn->GetPluginManager()->DestroyPlugins();
111 cmn->GetPluginManager()->LoadPlugins();
112
113 cmn->GetTaskManager()->DestroyTasks();
114 cmn->GetTaskManager()->LoadTasks();
115
116 AccessManager::Load(); //reload blaclist & privileged list
117 }
118
119 void SmsDaemon::Start()
120 {
121 Common* cmn = Common::instance();
122 string transceiver = cmn->GetConfigfile()->GetValue("smsdaemon","transceiver");
123
124 srand(time(0));
125
126 cmn->daemonStart = time(0);
127 _lastSmsCheck = Util::GetTimeOfDay();
128
129 Logger::logMessage("--------------------------------");
130 Logger::logMessage( VERSION );
131 Logger::logMessage( SVNVERSION );
132 Logger::logMessage( string("Transceiver: ") + transceiver );
133
134 AccessManager::Load(); //reload blaclist & privileged list
135 cmn->GetTaskManager()->LoadTasks();
136 cmn->GetPluginManager()->LoadPlugins();
137 Logger::logMessage("SMS daemon started");
138
139
140 try
141 {
142 MainLoop();
143 }
144 catch (std::exception& e)
145 {
146 Logger::logMessage( e.what() );
147 }
148 catch (...)
149 {
150 Logger::logMessage( "Caught unknown exception" );
151 }
152
153 cmn->GetPluginManager()->DestroyPlugins();
154
155 Logger::logMessage( cmn->getStatusMessage() );
156 }

  ViewVC Help
Powered by ViewVC 1.1.20