Fix RequestBroker 08/236908/4
authorSangyoon Jang <jeremy.jang@samsung.com>
Tue, 23 Jun 2020 08:04:27 +0000 (17:04 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Tue, 23 Jun 2020 11:59:20 +0000 (20:59 +0900)
Use non-static method, using lambda for c callback.

Change-Id: I91d5efc48fd9674e79e854752caabfc0d608bff0
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/theme/dbus/request_broker.cc
src/theme/dbus/request_broker.h

index d47eebc..7254668 100644 (file)
@@ -29,22 +29,21 @@ const char kDbusInterfaceName[] = "org.tizen.ThemeManager";
 const char kDbusObjectPath[] = "/org/tizen/ThemeManager";
 const char kDBusMethodSendData[] = "SendData";
 
+tizen_base::Bundle ErrorResultBundle() {
+  tizen_base::Bundle b;
+  b.Add(ttm::dbus::kCmdResultKey, "error");
+  return b;
 }
 
+}  // namespace
+
 namespace ttm {
 namespace dbus {
 
-static tizen_base::Bundle ErrorResultBundle() {
-  tizen_base::Bundle b;
-  b.Add(dbus::kCmdResultKey, "error");
-  return b;
-}
-
 void RequestBroker::OnReceiveDbusMethod(GDBusConnection* connection,
     const gchar* sender, const gchar* object_path, const gchar* interface_name,
     const gchar* method_name, GVariant* parameters,
     GDBusMethodInvocation* invocation, gpointer user_data) {
-  RequestBroker* broker = static_cast<RequestBroker*>(user_data);
   GVariant* reply_body = nullptr;
   int command;
   char* serialized = nullptr;
@@ -53,8 +52,8 @@ void RequestBroker::OnReceiveDbusMethod(GDBusConnection* connection,
   Command cmd = static_cast<Command>(command);
   tizen_base::Bundle b(serialized);
 
-  auto it = broker->filters_.find(cmd);
-  if (it == broker->filters_.end()) {
+  auto it = filters_.find(cmd);
+  if (it == filters_.end()) {
     LOG(ERROR) << "UnKnown command";
     g_dbus_method_invocation_return_value(invocation, nullptr);
     return;
@@ -87,7 +86,7 @@ RequestBroker& RequestBroker::GetInst() {
 }
 
 GDBusConnection* RequestBroker::GetConnection() {
-  return nullptr;
+  return connection_;
 }
 
 int RequestBroker::RegisterRequestFilter(RequestFilter filter) {
@@ -121,7 +120,14 @@ bool RequestBroker::EmitSignal(std::string signal_name,
 
 bool RequestBroker::Listen() {
   const GDBusInterfaceVTable interface_vtable = {
-    OnReceiveDbusMethod,
+    [](GDBusConnection* connection, const gchar* sender,
+        const gchar* object_path, const gchar* interface_name,
+        const gchar* method_name, GVariant* parameters,
+        GDBusMethodInvocation* invocation, gpointer user_data) {
+      reinterpret_cast<RequestBroker*>(user_data)->OnReceiveDbusMethod(
+          connection, sender, object_path, interface_name, method_name,
+          parameters, invocation, user_data);
+    },
     nullptr,
     nullptr
   };
@@ -169,29 +175,28 @@ bool RequestBroker::Listen() {
   return true;
 }
 
-void RequestBroker::OnReceiveDbusSignal(GDBusConnection* connection,
-    const gchar* sender_name, const gchar* object_path,
-    const gchar* interface_name, const gchar* signal_name,
-    GVariant* parameters, void* user_data) {
-  RequestBroker* broker = static_cast<RequestBroker*>(user_data);
-  char* serialized = nullptr;
-  int command;
-  g_variant_get(parameters, "(i&s)", &command, &serialized);
-
-  Command cmd = static_cast<Command>(command);
-  tizen_base::Bundle b(serialized);
-
-  auto it = broker->filters_.find(cmd);
-  if (it == broker->filters_.end())
-    return;
-
-  tizen_base::Bundle result = it->second.GetHandler()->OnRequest(cmd, b);
-}
-
 bool RequestBroker::Subscribe() {
   subscribe_id_ = g_dbus_connection_signal_subscribe(connection_, nullptr,
       kDbusInterfaceName, nullptr, kDbusObjectPath, nullptr,
-      G_DBUS_SIGNAL_FLAGS_NONE, OnReceiveDbusSignal, this, nullptr);
+      G_DBUS_SIGNAL_FLAGS_NONE,
+      [](GDBusConnection* connection, const gchar* sender_name,
+          const gchar* object_path, const gchar* interface_name,
+          const gchar* signal_name, GVariant* parameters, void* user_data) {
+        RequestBroker* broker = static_cast<RequestBroker*>(user_data);
+        char* serialized = nullptr;
+        int command;
+        g_variant_get(parameters, "(i&s)", &command, &serialized);
+
+        Command cmd = static_cast<Command>(command);
+        tizen_base::Bundle b(serialized);
+
+        auto it = broker->filters_.find(cmd);
+        if (it == broker->filters_.end())
+          return;
+
+        tizen_base::Bundle result = it->second.GetHandler()->OnRequest(cmd, b);
+      },
+      this, nullptr);
 
   return subscribe_id_ > 0;
 }
@@ -233,33 +238,6 @@ tizen_base::Bundle RequestBroker::SendData(Command cmd,
   return result;
 }
 
-void RequestBroker::OnResultReceivedCb(GObject* source_object,
-    GAsyncResult* res, gpointer user_data) {
-  auto param = static_cast<std::pair<Command, RequestBroker*>*>(user_data);
-  GDBusConnection* conn = reinterpret_cast<GDBusConnection*>(source_object);
-  GError* err = nullptr;
-  GDBusMessage* reply = g_dbus_connection_send_message_with_reply_finish(conn,
-      res, &err);
-  if (reply == nullptr) {
-    LOG(ERROR) << "No reply . err[" << (err ? err->message : "Unknown") << "]";
-    return;
-  }
-
-  char* serialized = nullptr;
-
-  GVariant* reply_body = g_dbus_message_get_body(reply);
-  g_variant_get(reply_body, "(&s)", &serialized);
-  RequestBroker* broker = param->second;
-  tizen_base::Bundle b(serialized);
-  g_object_unref(reply);
-
-  auto it = broker->filters_.find(param->first);
-  if (it == broker->filters_.end())
-    return;
-
-  it->second.GetHandler()->OnRequest(Command::RESULT, b);
-}
-
 void RequestBroker::SendDataAsync(Command cmd, tizen_base::Bundle& data) {
   GDBusMessage* msg = g_dbus_message_new_method_call(
       kDbusBusName, kDbusObjectPath, kDbusInterfaceName, kDBusMethodSendData);
@@ -274,10 +252,36 @@ void RequestBroker::SendDataAsync(Command cmd, tizen_base::Bundle& data) {
   std::pair<Command, RequestBroker*> param = std::make_pair(cmd, this);
 
   g_dbus_connection_send_message_with_reply(connection_, msg,
-      G_DBUS_SEND_MESSAGE_FLAGS_NONE, -1, nullptr,
-      nullptr, OnResultReceivedCb, &param);
+      G_DBUS_SEND_MESSAGE_FLAGS_NONE, -1, nullptr, nullptr,
+      [](GObject* source_object, GAsyncResult* res, gpointer user_data) {
+        auto param =
+            static_cast<std::pair<Command, RequestBroker*>*>(user_data);
+        GDBusConnection* conn =
+            reinterpret_cast<GDBusConnection*>(source_object);
+        GError* err = nullptr;
+        GDBusMessage* reply =
+            g_dbus_connection_send_message_with_reply_finish(conn, res, &err);
+        if (reply == nullptr) {
+          LOG(ERROR) << "No reply. err["
+                     << (err ? err->message : "Unknown") << "]";
+          return;
+        }
+
+        char* serialized = nullptr;
+
+        GVariant* reply_body = g_dbus_message_get_body(reply);
+        g_variant_get(reply_body, "(&s)", &serialized);
+        RequestBroker* broker = param->second;
+        tizen_base::Bundle b(serialized);
+        g_object_unref(reply);
+
+        auto it = broker->filters_.find(param->first);
+        if (it == broker->filters_.end())
+          return;
+        it->second.GetHandler()->OnRequest(Command::RESULT, b);
+      },
+      &param);
 }
 
 }  // namespace dbus
 }  // namespace ttm
-
index 39b2779..1380f27 100644 (file)
@@ -42,27 +42,20 @@ class RequestBroker {
   void SendDataAsync(Command cmd, tizen_base::Bundle&);
 
  private:
-  static void OnReceiveDbusMethod(GDBusConnection* connection,
+  void OnReceiveDbusMethod(GDBusConnection* connection,
       const gchar* sender, const gchar* object_path,
       const gchar* interface_name, const gchar* method_name,
       GVariant* parameters, GDBusMethodInvocation* invocation,
       gpointer user_data);
 
-  static void OnReceiveDbusSignal(GDBusConnection* connection,
-      const gchar* sender_name, const gchar* object_path,
-      const gchar* interface_name, const gchar* signal_name,
-      GVariant* parameters, void* user_data);
-
-  static void OnResultReceivedCb(GObject* source_object,
-      GAsyncResult* res, gpointer user_data);
-
-  RequestBroker() = default;
+  RequestBroker() : registration_id_(0), subscribe_id_(0),
+      connection_(nullptr) {}
   ~RequestBroker() = default;
   bool Init();
 
-  int registration_id_ = 0;
-  int subscribe_id_ = 0;
-  GDBusConnection* connection_ = nullptr;
+  int registration_id_;
+  int subscribe_id_;
+  GDBusConnection* connection_;
   std::map<Command, RequestFilter> filters_;
 };