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

Annotation of /smsdaemon/SmsDaemon.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 151 - (hide annotations) (download)
Mon Dec 8 10:42:04 2008 UTC (15 years, 5 months ago) by torben
File size: 2389 byte(s)
Added a transceiver which uses smstools for interfaceing with the gsm modem.
-> http://smstools3.kekekasvi.com/


1 torben 88 #include "SmsDaemon.h"
2    
3     #include <string>
4    
5     #include <sstream>
6 torben 132 #include <stdlib.h>
7    
8 torben 88 #include "common.h"
9    
10 torben 149 #include "ISmsTransceiver.h"
11 torben 88
12     #include "Plugin.h"
13     #include "kbhit.h"
14    
15     #include "util.h"
16    
17 torben 92 #include "TaskManager.h"
18     #include "PluginManager.h"
19 torben 151 #include "ConfigFile.h"
20 torben 92
21 torben 94 #include "version.h"
22    
23 torben 88 using namespace std;
24    
25     void SmsDaemon::CreateLogMessage(SMS& sms,bool hasPlugin)
26     {
27     ostringstream os;
28 torben 142 os << "Recieved sms from " << sms.GetSender() << " ; command=" << sms.ExtractCommand();
29 torben 88 if (!hasPlugin)
30     os << " -- PLUGIN NOT FOUND";
31    
32     Common::instance()->logMessage(os.str());
33     }
34    
35    
36     void SmsDaemon::CheckSms()
37     {
38 torben 128 const int INTERVAL = 1000; //no of milliseconds between sms checks
39 torben 95 timeval now = Util::GetTimeOfDay();
40    
41     if ( Util::mTimeDiff(_lastSmsCheck,now) < INTERVAL)
42     return;
43    
44     _lastSmsCheck = now;
45    
46 torben 88 Common* cmn = Common::instance();
47    
48 torben 92 PluginManager* manager = cmn->GetPluginManager();
49 torben 88 vector<SMS> sms = _modem.ReadSms();
50    
51     for (unsigned int i=0; i<sms.size(); ++i)
52     {
53 torben 142 string cmd = sms[i].ExtractCommand();
54 torben 88
55     cmd = Util::str_tolower(cmd);
56    
57 torben 92 Plugin* pl = manager->GetPlugin(cmd);
58 torben 88
59     CreateLogMessage(sms[i], pl != 0);
60    
61     if (pl)
62     {
63     pl->Execute(_modem, sms[i]);
64     }
65     else
66     {
67 torben 142 _modem.SendSms(sms[i].GetSender(), "Unknown command!", false);
68 torben 88 }
69    
70 torben 142 _modem.DeleteSms(sms[i].GetIndex());
71 torben 88 cmn->smsCounter.incomming++;
72     }
73     }
74    
75    
76     void SmsDaemon::MainLoop()
77     {
78     Common* cmn = Common::instance();
79     volatile bool& mainContinue = cmn->mainContinue;
80    
81    
82     mainContinue = true;
83    
84     while (mainContinue)
85     {
86    
87 torben 128 CheckSms();
88 torben 88
89 torben 128 cmn->GetTaskManager()->ExecuteTasks(_modem);
90 torben 88
91     if (cmn->isDebug && kbhit())
92     break;
93    
94 torben 128 Util::Sleep(100);
95 torben 88
96     }
97     }
98    
99     void SmsDaemon::Start()
100     {
101     Common* cmn = Common::instance();
102 torben 151 string transceiver = cmn->GetConfigfile()->GetValue("smsdaemon","transceiver");
103 torben 88
104 torben 132 srand(time(0));
105 torben 88
106     cmn->daemonStart = time(0);
107 torben 95 _lastSmsCheck = Util::GetTimeOfDay();
108 torben 88
109     cmn->logMessage("--------------------------------");
110 torben 94 cmn->logMessage( VERSION );
111 torben 101 cmn->logMessage( SVNVERSION );
112 torben 151 cmn->logMessage( string("Transceiver: ") + transceiver );
113 torben 88
114 torben 92 cmn->GetTaskManager()->LoadTasks();
115     cmn->GetPluginManager()->LoadPlugins();
116 torben 88 cmn->logMessage("SMS daemon started");
117    
118     _modem.DeleteAllSms();
119    
120     try
121     {
122     MainLoop();
123     }
124     catch (std::exception& e)
125     {
126     cmn->logMessage( e.what() );
127     }
128     catch (...)
129     {
130     cmn->logMessage( "Caught unknown exception" );
131     }
132    
133     cmn->logMessage( cmn->getStatusMessage() );
134     }

  ViewVC Help
Powered by ViewVC 1.1.20