-
Notifications
You must be signed in to change notification settings - Fork 0
/
TaskManager.cpp
97 lines (76 loc) · 1.62 KB
/
TaskManager.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
* TaskManager.cpp
*
* Created: 12/27/2019 10:45:17 AM
* Author: TC
*/
#include "TaskManager.h"
namespace TaskManager
{
void TaskManager::initialize()
{
eventListener = new EventListener;
taskList = new TaskList;
batteryMonitorTask = new BatteryMonitorTask;
rainGaugeTask = new RainGaugeTask;
irrigationTask = new IrrigationTask;
sleepTask = new SleepTask;
eventListener->addSubscription(batteryMonitorTask);
eventListener->addSubscription(rainGaugeTask);
eventListener->addSubscription(irrigationTask);
eventListener->addSubscription(sleepTask);
}
void TaskManager::checkEvents()
{
Event e;
if ( !eventListener->isEmpty() )
{
Node* n = eventListener->getStart();
auto makeEvent = [&e](Node* n)
{
e.taskPriority = n->priority;
e.time = AutoFarm::Clock::currentTimeStamp();
e.task = n->task;
};
if (n->task->test() )
{
makeEvent(n);
taskList->addEvent(e);
}
while (n->nextNode != nullptr )
{
n = eventListener->getNext(n);
if (n->task->test() )
{
makeEvent(n);
taskList->addEvent(e);
}
}
}
}
void TaskManager::prioritize()
{
while ( !taskList->isEmpty() )
{
if( !taskList->isSorted() )
{
taskList->sort();
}
}
}
void TaskManager::performOutputs()
{
Event e;
while(!taskList->isEmpty())
{
e = taskList->getNext();
e.task->execute();
}
}
void TaskManager::mainLoop()
{
checkEvents();
prioritize();
performOutputs();
}
}