Add property changed signal handler

Enable the control application to handle property changed signals to set
or update a cached set of these properties

Change-Id: Ib84ffe1e801ee7dd85d17fdbb122d124d307dbd3
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/zone.cpp b/control/zone.cpp
index 1e50060..28b81f9 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -35,6 +35,22 @@
     {
         _fans.emplace_back(std::make_unique<Fan>(bus, def));
     }
+
+    // Setup signal trigger for property changes

+    for (auto& event : std::get<setSpeedEventsPos>(def))

+    {

+        for (auto& prop : event)

+        {

+            _signalEvents.emplace_back(

+                std::make_unique<SignalEvent>(this,

+                                              std::get<handlerObjPos>(prop)

+                                              ));

+            _matches.emplace_back(bus,

+                                  std::get<signaturePos>(prop).c_str(),

+                                  signalHandler,

+                                  _signalEvents.back().get());

+        }

+    }
 }
 
 
@@ -46,6 +62,26 @@
     }
 }
 
+int Zone::signalHandler(sd_bus_message* msg,
+                        void* data,
+                        sd_bus_error* err)
+{
+    auto sdbpMsg = sdbusplus::message::message(msg);
+    auto& signalEvent = *static_cast<SignalEvent*>(data);
+    std::get<zoneObjPos>(signalEvent)->handleEvent(
+        sdbpMsg,
+        std::get<handlerObjPos>(signalEvent));
+    return 0;
+}
+
+void Zone::handleEvent(sdbusplus::message::message& msg,
+                       const Handler& handler)
+{
+    // Handle the callback
+    handler(_bus, msg, *this);
+}
+
+
 }
 }
 }