summaryrefslogtreecommitdiffstats
path: root/control/zone.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'control/zone.cpp')
-rw-r--r--control/zone.cpp49
1 files changed, 26 insertions, 23 deletions
diff --git a/control/zone.cpp b/control/zone.cpp
index 5f0c15d..ec0f944 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -335,29 +335,9 @@ void Zone::initEvent(const SetSpeedEvent& event)
auto timerConf = std::get<timerConfPos>(event);
if (std::get<intervalPos>(timerConf) != seconds(0))
{
- // Associate event data with timer
- std::unique_ptr<EventData> eventData =
- std::make_unique<EventData>(
- std::get<groupPos>(event),
- "",
- nullptr,
- std::get<actionsPos>(event)
- );
- std::unique_ptr<util::Timer> timer =
- std::make_unique<util::Timer>(
- _eventLoop,
- [this,
- action = &(std::get<actionsPos>(event)),
- group = &(std::get<groupPos>(event))]()
- {
- this->timerExpired(*group, *action);
- });
- if (!timer->running())
- {
- timer->start(std::get<intervalPos>(timerConf),
- std::get<typePos>(timerConf));
- }
- addTimer(std::move(eventData), std::move(timer));
+ addTimer(std::get<groupPos>(event),
+ std::get<actionsPos>(event),
+ timerConf);
}
// Run action functions for initial event state
std::for_each(
@@ -448,6 +428,29 @@ std::vector<TimerEvent>::iterator Zone::findTimer(
return _timerEvents.end();
}
+void Zone::addTimer(const Group& group,
+ const std::vector<Action>& actions,
+ const TimerConf& tConf)
+{
+ // Associate event data with timer
+ auto data = std::make_unique<EventData>(
+ group,
+ "",
+ nullptr,
+ actions
+ );
+ auto timer = std::make_unique<util::Timer>(
+ _eventLoop,
+ std::bind(&Zone::timerExpired, this, group, actions)
+ );
+ if (!timer->running())
+ {
+ timer->start(std::get<intervalPos>(tConf),
+ std::get<typePos>(tConf));
+ }
+ _timerEvents.emplace_back(std::move(data), std::move(timer));
+}
+
void Zone::timerExpired(Group eventGroup, std::vector<Action> eventActions)
{
// Perform the actions
OpenPOWER on IntegriCloud