Change signal framework from rmi to dbus 24/158824/1 accepted/tizen/unified/20171130.063326 submit/tizen/20171129.063304 submit/tizen_4.0/20171129.062733
authorsangwan.kwon <sangwan.kwon@samsung.com>
Wed, 1 Nov 2017 09:24:42 +0000 (18:24 +0900)
committersangwan.kwon <sangwan.kwon@samsung.com>
Fri, 3 Nov 2017 08:26:45 +0000 (17:26 +0900)
Change-Id: Ic7ed3d764653904cecb21b9ee4d69f520fa3db67
Signed-off-by: sangwan.kwon <sangwan.kwon@samsung.com>
libs/policy-client.cpp
libs/policy-client.h

index 8c819c3..8febbf8 100644 (file)
 #include <system_info.h>
 #include <klay/filesystem.h>
 
+#include <klay/dbus/signal.h>
+#include <klay/audit/logger.h>
+
 #include "policy-client.h"
 
 namespace {
 
-const std::string SIGNAL_INTERFACE = "DevicePolicyManager::subscribeSignal";
+const std::string SIGNAL_OBJECT_PATH = "/org/tizen/DevicePolicyManger/PIL";
+const std::string SIGNAL_EVENT_INTERFACE = "org.tizen.DevicePolicyManager.PIL.Event";
 
 const std::string POLICY_MANAGER_ADDRESS = "/tmp/.device-policy-manager.sock";
 
@@ -75,29 +79,38 @@ void DevicePolicyClient::disconnect() noexcept
 
 int DevicePolicyClient::subscribeSignal(const std::string& name,
                                                                                const SignalHandler& handler,
-                                                                               void* data)
+                                                                               void* data) noexcept
 {
-       auto dispatch = [handler, data](const std::string &name, const std::string &object) {
-               handler(name.c_str(), object.c_str(), data);
-       };
-
-       if (!maintenanceMode) {
+       if (!maintenanceMode)
                return 0;
-       }
 
        try {
-               return client->subscribe<std::string, std::string>(SIGNAL_INTERFACE, name, dispatch);
+               auto dispatch = [name, handler, data](dbus::Variant variant) {
+                       char *state = NULL;
+                       variant.get("(s)", &state);
+
+                       handler(name.c_str(), state, data);
+               };
+
+               dbus::signal::Receiver receiver(SIGNAL_OBJECT_PATH, SIGNAL_EVENT_INTERFACE);
+               return receiver.subscribe(name, dispatch);
        } catch (runtime::Exception& e) {
-               std::cout << e.what() << std::endl;
+               ERROR(e.what());
                return -1;
        }
 }
 
-int DevicePolicyClient::unsubscribeSignal(int id)
+int DevicePolicyClient::unsubscribeSignal(int id) noexcept
 {
-       if (!maintenanceMode) {
+       if (!maintenanceMode)
                return 0;
-       }
 
-       return client->unsubscribe("", id);
+       try {
+               dbus::signal::Receiver receiver(SIGNAL_OBJECT_PATH, SIGNAL_EVENT_INTERFACE);
+               receiver.unsubscribe(id);
+               return 0;
+       } catch (runtime::Exception& e) {
+               ERROR(e.what());
+               return -1;
+       }
 }
index bb12623..bb66763 100644 (file)
@@ -35,8 +35,10 @@ public:
        int connect(const std::string& address) noexcept;
        void disconnect() noexcept;
 
-       int subscribeSignal(const std::string& name, const SignalHandler& handler, void* data);
-       int unsubscribeSignal(int subscriberId);
+       int subscribeSignal(const std::string& name,
+                                               const SignalHandler& handler,
+                                               void* data) noexcept;
+       int unsubscribeSignal(int subscriberId) noexcept;
 
        template<typename Type, typename... Args>
        Type methodCall(const std::string& method, Args&&... args)