Add DBusCaller::callAsync() 63/142663/1
authorMu-Woong Lee <muwoong.lee@samsung.com>
Mon, 7 Aug 2017 03:13:42 +0000 (12:13 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Mon, 7 Aug 2017 03:13:42 +0000 (12:13 +0900)
Change-Id: Idf4716ee4bb6af392c0e95e62dd09f6c2da6de4c
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
include/DBusCaller.h
src/server/DBusCaller.cpp

index 8d2f155..371dbd8 100644 (file)
@@ -27,6 +27,11 @@ namespace ctx {
                GVariant* call(const std::string& busName, const std::string& objectPath,
                                const std::string& interface, const std::string& methodName,
                                GVariant* param);
+
+               // This does not return the method call result.
+               void callAsync(const std::string& busName, const std::string& objectPath,
+                               const std::string& interface, const std::string& methodName,
+                               GVariant* param);
        };
 
 }
index 977ab2d..dd6d024 100644 (file)
 #include <ServerUtil.h>
 #include <DBusCaller.h>
 
+#define SYNC_CALL_TIMEOUT      1000
+#define ASYNC_CALL_TIMEOUT     CTX_DBUS_TIMEOUT
+
 using namespace ctx;
 
+static void __async_ready_cb(GObject* srcObj, GAsyncResult* res, gpointer userData)
+{
+       GError *gerr = NULL;
+       GVariant* param = g_dbus_connection_call_finish(util::get_dbus_connection(), res, &gerr);
+
+       if (param) {
+               _D("Call done");
+               g_variant_unref(param);
+       }
+
+       HANDLE_GERROR(gerr);
+}
+
 GVariant* DBusCaller::call(const std::string& busName, const std::string& objectPath,
                const std::string& interface, const std::string& methodName, GVariant* param)
 {
@@ -26,9 +42,17 @@ GVariant* DBusCaller::call(const std::string& busName, const std::string& object
 
        GVariant* result = g_dbus_connection_call_sync(util::get_dbus_connection(),
                        busName.c_str(), objectPath.c_str(), interface.c_str(), methodName.c_str(), param,
-                       NULL, G_DBUS_CALL_FLAGS_NONE, CTX_DBUS_TIMEOUT, NULL, &gerr);
+                       NULL, G_DBUS_CALL_FLAGS_NONE, SYNC_CALL_TIMEOUT, NULL, &gerr);
 
        HANDLE_GERROR(gerr);
 
        return result;
 }
+
+void DBusCaller::callAsync(const std::string& busName, const std::string& objectPath,
+               const std::string& interface, const std::string& methodName, GVariant* param)
+{
+       g_dbus_connection_call(util::get_dbus_connection(),
+                       busName.c_str(), objectPath.c_str(), interface.c_str(), methodName.c_str(), param,
+                       NULL, G_DBUS_CALL_FLAGS_NONE, ASYNC_CALL_TIMEOUT, NULL, __async_ready_cb, NULL);
+}