gboolean /*remote_peer_vanished*/,
GError* /*error*/,
gpointer user_data) {
+ DBusServer* self = reinterpret_cast<DBusServer*>(user_data);
+ if (self) {
+ auto callback = self->GetDisconnectedCallback();
+ if (callback) {
+ callback(connection);
+ }
+ }
+
g_signal_handlers_disconnect_by_func(connection,
(gpointer)OnClosedConnection,
user_data);
}
}
+void DBusServer::SetDisconnectedCallback(DisconnectedCallback func) {
+ disconnected_callback_ = func;
+}
+
void DBusServer::SetPeerCredentialsCallback(PeerCredentialsCallback func) {
peer_credentials_callback_ = func;
}
property_setters_[iface] = func;
}
+DBusServer::DisconnectedCallback
+DBusServer::GetDisconnectedCallback() const {
+ return disconnected_callback_;
+}
+
DBusServer::PeerCredentialsCallback
DBusServer::GetPeerCredentialsCallback() const {
return peer_credentials_callback_;
typedef std::function<bool(GDBusConnection* connection,
const gchar* property,
GVariant* value)> PropertySetter;
+ typedef std::function<void(GDBusConnection* connection)> DisconnectedCallback;
DBusServer();
virtual ~DBusServer();
const std::string& iface, const std::string& signal_name,
GVariant* parameters);
+ void SetDisconnectedCallback(DisconnectedCallback func);
void SetPeerCredentialsCallback(PeerCredentialsCallback func);
void SetMethodCallback(const std::string& iface, MethodCallback func);
void SetPropertyGetter(const std::string& iface, PropertyGetter func);
void SetPropertySetter(const std::string& iface, PropertySetter func);
+ DisconnectedCallback GetDisconnectedCallback() const;
PeerCredentialsCallback GetPeerCredentialsCallback() const;
MethodCallback GetMethodCallback(const std::string& iface);
PropertySetter GetPropertySetter(const std::string& iface);
GDBusServer* server_;
GDBusNodeInfo* node_info_;
+ DisconnectedCallback disconnected_callback_;
PeerCredentialsCallback peer_credentials_callback_;
std::map<std::string, MethodCallback> method_callbacks_;
std::map<std::string, PropertyGetter> property_getters_;
dbus_server_.Start(app_uuid_ +
"." + std::string(kDBusNameForApplication));
+ dbus_server_.SetDisconnectedCallback([](GDBusConnection* /*conn*/) {
+ LOGGER(ERROR) << "Application DBusServer has received disconnection event.";
+ exit(1);
+ });
+
// Execute ExtensionProcess
ExecExtensionProcess(app_uuid_);