Add support for processing signal event triggers
Process signal event triggers' list of conditions on a group and perform
the defined actions.
This re-uses the following struct directly from
phosphor-inventory-manager:
--struct PropertyChangedCondition
Change-Id: I98552f3d168cfcd9f0c1c357289b7000374ae60e
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/src/monitor.cpp b/src/monitor.cpp
index 2864924..aeb1fe5 100644
--- a/src/monitor.cpp
+++ b/src/monitor.cpp
@@ -16,7 +16,26 @@
Monitor::Monitor(sdbusplus::bus::bus& bus) :
bus(bus)
{
+ // Process thru given events that are type 'signal'
+ for (auto& event : events)
+ {
+ for (auto& pEvent : std::get<std::vector<std::shared_ptr<Event>>>(event))
+ {
+ if (pEvent->trigger != Event::Trigger::SIGNAL)
+ {
+ continue;
+ }
+ auto signalEvent = static_cast<SignalEvent*>(pEvent.get());
+ eventArgs.emplace_back(std::make_unique<eventArg>(this,
+ signalEvent,
+ &event));
+ matches.emplace_back(bus,
+ signalEvent->signature,
+ handleSignal,
+ eventArgs.back().get());
+ }
+ }
}
void Monitor::processStart() noexcept
@@ -36,6 +55,19 @@
}
}
+int Monitor::handleSignal(sd_bus_message* msg,
+ void* data,
+ sd_bus_error* err)
+{
+ auto sdbpMsg = sdbusplus::message::message(msg);
+ auto& eventArg = *static_cast<Monitor::eventArg*>(data);
+ std::get<0>(eventArg)->handleEvent(
+ sdbpMsg,
+ static_cast<const SignalEvent&>(*std::get<1>(eventArg)),
+ *std::get<2>(eventArg));
+ return 0;
+}
+
void Monitor::handleEvent(sdbusplus::message::message& msg,
const Event& event,
const std::tuple<std::vector<std::shared_ptr<Event>>,