Arduino DLNA Server
Loading...
Searching...
No Matches
Scheduler.h
Go to the documentation of this file.
1#pragma once
2
3#include "Arduino.h" // for millis
4#include "DLNADeviceInfo.h"
5#include "IUDPService.h"
6#include "Schedule.h"
7
8namespace tiny_dlna {
9
15class Scheduler {
16 public:
18 void add(Schedule *schedule) {
19 schedule->active = true;
20 DlnaLogger.log(DlnaLogLevel::Info, "Schedule %s", schedule->name());
21 queue.push_back(schedule);
22 }
23
25 void execute(IUDPService &udp) {
26 // DlnaLogger.log(DlnaLogLevel::Debug, "Scheduler::execute");
27 bool is_cleanup = false;
28 for (auto &p_s : queue) {
29 if (p_s == nullptr) continue;
30 Schedule &s = *p_s;
31 if (millis() >= s.time) {
32 // handle end time: if expired set inactive
33 if (s.end_time != 0ul && millis() > s.end_time) {
34 s.active = false;
35 }
36 // process active schedules
37 if (s.active) {
38 DlnaLogger.log(DlnaLogLevel::Debug, "Scheduler::execute %s: Executing", s.name());
39
40 s.process(udp);
41 // reschedule if necessary
42 if (s.repeat_ms > 0) {
43 s.time = millis() + s.repeat_ms;
44 } else {
45 s.active = false;
46 is_cleanup = true;
47 }
48 } else {
49 DlnaLogger.log(DlnaLogLevel::Debug, "Scheduler::execute %s: Inactive", s.name());
50 is_cleanup = true;
51 }
52 }
53 }
54
55 if (is_cleanup) cleanup();
56 }
57
60 for (auto &p_s : queue) {
61 if (p_s == nullptr) continue;
62 Schedule &s = *p_s;
63 if (s.active && StrView(s.name()).equals("MSearch")) return true;
64 }
65 return false;
66 }
67
68 protected:
70
71 void cleanup() {
72 for (auto it = queue.begin(); it != queue.end(); ++it) {
73 auto p_rule = *it;
74 if (!(p_rule)->active) {
75 DlnaLogger.log(DlnaLogLevel::Debug, "Scheduler::cleanup queue: %s", p_rule->name());
76 // remove schedule from collection
77 queue.erase(it);
78 // delete schedule
79 delete p_rule;
80 break;
81 }
82 }
83 }
84};
85
86} // namespace tiny_dlna
Abstract Interface for UDP API.
Definition: IUDPService.h:34
void log(DlnaLogLevel current_level, const char *fmt...)
Print log message.
Definition: Logger.h:40
Scheduler which processes all due Schedules (to send out UDP replies)
Definition: Scheduler.h:15
Vector< Schedule * > queue
Definition: Scheduler.h:69
void cleanup()
Definition: Scheduler.h:71
bool isMSearchActive()
Returns true if there is any active schedule with name "MSearch".
Definition: Scheduler.h:59
void execute(IUDPService &udp)
Execute all due schedules.
Definition: Scheduler.h:25
void add(Schedule *schedule)
Add a schedule to the scheduler.
Definition: Scheduler.h:18
A simple wrapper to provide string functions on char*. If the underlying char* is a const we do not a...
Definition: StrView.h:19
virtual bool equals(const char *str)
checks if the string equals indicated parameter string
Definition: StrView.h:178
Vector implementation which provides the most important methods as defined by std::vector....
Definition: Vector.h:21
Definition: Allocator.h:6
LoggerClass DlnaLogger
Definition: Logger.cpp:5
An individual Schedule (to send out UDP messages)
Definition: Schedule.h:17
uint64_t end_time
Definition: Schedule.h:24
bool active
Definition: Schedule.h:26
virtual const char * name()
Definition: Schedule.h:30
virtual bool process(IUDPService &udp)
Definition: Schedule.h:28
uint64_t time
Definition: Schedule.h:20
uint32_t repeat_ms
Definition: Schedule.h:22