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

Annotation of /smsdaemon/TaskManager.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 149 - (hide annotations) (download)
Sun Dec 7 20:58:41 2008 UTC (15 years, 5 months ago) by torben
File size: 2179 byte(s)
Refactoring / rename:
        IGsmModem -> ISmsTransceiver
        GsmModem -> ModemTransceiver
        DebugGsmModem -> DebugTransceiver

Move DebugTransceiver to its own files.


1 torben 26
2     #include "TaskManager.h"
3    
4     #include "common.h"
5    
6 torben 82 #include <time.h>
7 torben 26
8 torben 132 #include "tasks/SpoolTask.h"
9    
10    
11 torben 26 TaskManager::TaskManager()
12 torben 82 : _lastExecuted(0)
13 torben 26 {
14     }
15    
16     TaskManager::~TaskManager()
17 torben 96 {
18     //delete any temporary tasks still in the list
19     std::list<Task*>::iterator it;
20     for (it = _temp_tasks.begin(); it != _temp_tasks.end(); ++it)
21     {
22     delete (*it);
23     }
24 torben 26 }
25    
26    
27     void TaskManager::LoadTasks()
28     {
29 torben 132 static SpoolTask task;
30 torben 26
31 torben 104 //print the loaded tasks
32     std::map<std::string, Task*>::iterator it;
33 torben 129 for(it = _persistant_tasks.begin(); it != _persistant_tasks.end(); ++it)
34 torben 104 {
35     Task* tsk = (*it).second;
36     if (tsk != 0)
37     Common::instance()->logMessage( std::string("Loaded task \"") + tsk->GetName() + "\"" );
38     }
39 torben 26 }
40    
41 torben 82
42 torben 129 void TaskManager::AddPersistantTask(Task* task)
43 torben 82 {
44 torben 96 Common* cmn = Common::instance();
45 torben 82
46 torben 96 if (task != 0)
47 torben 82 {
48 torben 96 std::string name = task->GetName();
49 torben 82
50 torben 129 if ( _persistant_tasks[ name ] == 0)
51     _persistant_tasks[ name ] = task;
52 torben 96 else
53     cmn->logMessage( std::string("AddTask() -- already have a task called ") + name);
54 torben 82 }
55 torben 96 else
56     {
57     cmn->logMessage("AddTask() -- cannot register a null pointer");
58     }
59 torben 82 }
60    
61 torben 96 void TaskManager::AddTemporaryTask(Task* task)
62 torben 26 {
63 torben 96 _temp_tasks.push_back(task);
64 torben 26 }
65    
66    
67 torben 149 void TaskManager::ExecuteTasks(ISmsTransceiver& modem)
68 torben 26 {
69 torben 96 const int SLEEP_TIME = 10; //wait at least 10 seconds between executions
70     int now = time(0);
71 torben 26
72 torben 96 if (now < (_lastExecuted + SLEEP_TIME) )
73     return;
74    
75     _lastExecuted = now;
76    
77     //execute real tasks
78    
79     std::map<std::string, Task*>::iterator m_it;
80    
81 torben 129 for (m_it = _persistant_tasks.begin(); m_it != _persistant_tasks.end(); ++m_it)
82 torben 26 {
83 torben 96 Task* tsk = (*m_it).second;
84     tsk->ExecuteTask(modem);
85 torben 26 }
86    
87 torben 96 //execute temporary tasks
88 torben 26
89 torben 96 std::list<Task*>::iterator l_it;
90     for (l_it = _temp_tasks.begin(); l_it != _temp_tasks.end(); ++l_it)
91     {
92     Task* tsk = (*l_it);
93     tsk->ExecuteTask(modem);
94    
95     if ( tsk->IsFinished() )
96     {
97     delete tsk;
98     l_it = _temp_tasks.erase(l_it);
99    
100     //now l_it points to the next element in the list,
101     //but since the for() loop will increment it before next iteration we will decrease it here
102     --l_it;
103     }
104     }
105    
106    
107 torben 26 }
108    
109    
110 torben 129 Task* TaskManager::GetPersistantTask(const std::string& taskname)
111 torben 96 {
112 torben 129 return _persistant_tasks[ taskname ];
113 torben 96 }

  ViewVC Help
Powered by ViewVC 1.1.20