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;
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;
}
GDBusConnection* RequestBroker::GetConnection() {
- return nullptr;
+ return connection_;
}
int RequestBroker::RegisterRequestFilter(RequestFilter filter) {
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
};
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;
}
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);
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, ¶m);
+ 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);
+ },
+ ¶m);
}
} // namespace dbus
} // namespace ttm
-
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_;
};