std::shared_ptr<CommonAPI::DBus::DBusStubAdapter> createDBusStubAdapter(std::shared_ptr<CommonAPI::DBus::DBusConnection> dbusConnection, const std::string& commonApiAddress) { CommonAPI::DBus::DBusAddress dbusAddress; CommonAPI::DBus::DBusAddressTranslator::get()->translate(commonApiAddress, dbusAddress); std::shared_ptr<CommonAPI::DBus::DBusStubAdapter> dbusStubAdapter; std::shared_ptr<VERSION::commonapi::tests::TestInterfaceStubDefault> stub = std::make_shared<VERSION::commonapi::tests::TestInterfaceStubDefault>(); dbusStubAdapter = std::make_shared<VERSION::commonapi::tests::TestInterfaceDBusStubAdapter>(dbusAddress, dbusConnection, stub); dbusStubAdapter->init(dbusStubAdapter); std::shared_ptr<CommonAPI::DBus::DBusObjectManagerStub> rootDBusObjectManagerStub = dbusConnection->getDBusObjectManager()->getRootDBusObjectManagerStub(); rootDBusObjectManagerStub->exportManagedDBusStubAdapter(dbusStubAdapter); const auto dbusObjectManager = dbusConnection->getDBusObjectManager(); dbusObjectManager->registerDBusStubAdapter(dbusStubAdapter); return dbusStubAdapter; }
bool DBusObjectManagerStub::unexportManagedDBusStubAdapter(std::shared_ptr<DBusStubAdapter> managedDBusStubAdapter) { assert(managedDBusStubAdapter); std::lock_guard<std::mutex> dbusObjectManagerStubLock(dbusObjectManagerStubLock_); const bool isRegistrationSuccessful = unregisterDBusStubAdapter(managedDBusStubAdapter); if (!isRegistrationSuccessful) { return false; } auto dbusConnection = dbusConnection_.lock(); if (dbusConnection && dbusConnection->isConnected()) { const bool isDBusSignalEmitted = emitInterfacesRemovedSignal(managedDBusStubAdapter, dbusConnection); if (!isDBusSignalEmitted) { registerDBusStubAdapter(managedDBusStubAdapter); return false; } } return true; }