#include "service_manager.h" namespace roro { void ServiceManager::add(Service& service) { entries_.push_back({&service, 0, true}); } void ServiceManager::startAll(uint32_t nowMs) { for (auto& e : entries_) { e.service->start(); e.lastTickMs = nowMs; e.due = true; } running_ = true; } void ServiceManager::stopAll() { for (auto it = entries_.rbegin(); it != entries_.rend(); ++it) it->service->stop(); running_ = false; } void ServiceManager::tick(uint32_t nowMs) { if (!running_) return; for (auto& e : entries_) { // Unsigned subtraction keeps working across the 49-day millis() wraparound. if (e.due || nowMs - e.lastTickMs >= e.service->tickIntervalMs()) { e.due = false; e.lastTickMs = nowMs; e.service->tick(nowMs); } } } } // namespace roro