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);
};
}
#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)
{
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);
+}