Correct instantiation of internal attribute
[profile/ivi/common-api-dbus-runtime.git] / src / CommonAPI / DBus / DBusProxy.cpp
index 958e82b..1701fe1 100644 (file)
@@ -10,7 +10,6 @@
 #endif
 
 #include "DBusProxy.h"
-#include "DBusServiceRegistry.h"
 #include "DBusUtils.h"
 
 #include <cassert>
@@ -34,25 +33,29 @@ DBusProxy::DBusProxy(const std::string& commonApiAddress,
                      const std::string& dbusBusName,
                      const std::string& dbusObjectPath,
                      const std::shared_ptr<DBusProxyConnection>& dbusConnection):
-                DBusProxyBase(split(commonApiAddress, ':')[1],
-                              split(commonApiAddress, ':')[2],
-                              dbusInterfaceName,
-                              dbusBusName,
-                              dbusObjectPath,
-                              dbusConnection),
+                DBusProxyBase(dbusConnection),
+                commonApiServiceId_(split(commonApiAddress, ':')[1]),
+                commonApiParticipantId_(split(commonApiAddress, ':')[2]),
+                dbusBusName_(dbusBusName),
+                dbusObjectPath_(dbusObjectPath),
+                dbusInterfaceName_(dbusInterfaceName),
                 dbusProxyStatusEvent_(this),
                 availabilityStatus_(AvailabilityStatus::UNKNOWN),
-                interfaceVersionAttribute_(*this, "getInterfaceVersion") {
+                interfaceVersionAttribute_(*this, "getInterfaceVersion", "uu"),
+                dbusServiceRegistry_(dbusConnection->getDBusServiceRegistry()) {
+
     const std::string commonApiDomain = split(commonApiAddress, ':')[0];
     assert(commonApiDomain == "local");
 
-    dbusServiceStatusEventSubscription_ = dbusConnection->getDBusServiceRegistry()->getServiceStatusEvent().subscribe(
+    dbusServiceRegistrySubscription_ = dbusServiceRegistry_->subscribeAvailabilityListener(
                     commonApiAddress,
-                    std::bind(&DBusProxy::onServiceStatusEvent, this, std::placeholders::_1, std::placeholders::_2));
+                    std::bind(&DBusProxy::onDBusServiceInstanceStatus, this, std::placeholders::_1));
 }
 
 DBusProxy::~DBusProxy() {
-    getDBusConnection()->getDBusServiceRegistry()->getServiceStatusEvent().unsubscribe(dbusServiceStatusEventSubscription_);
+    dbusServiceRegistry_->unsubscribeAvailabilityListener(
+                    getAddress(),
+                    dbusServiceRegistrySubscription_);
 }
 
 bool DBusProxy::isAvailable() const {
@@ -61,7 +64,7 @@ bool DBusProxy::isAvailable() const {
 
 bool DBusProxy::isAvailableBlocking() const {
     if (availabilityStatus_ == AvailabilityStatus::UNKNOWN) {
-        std::chrono::milliseconds singleWaitDuration(100);
+        std::chrono::milliseconds singleWaitDuration(2);
 
         // Wait for the service registry
         while (availabilityStatus_ == AvailabilityStatus::UNKNOWN) {
@@ -80,12 +83,37 @@ InterfaceVersionAttribute& DBusProxy::getInterfaceVersionAttribute() {
     return interfaceVersionAttribute_;
 }
 
-SubscriptionStatus DBusProxy::onServiceStatusEvent(const std::string& name, const AvailabilityStatus& availabilityStatus) {
+void DBusProxy::onDBusServiceInstanceStatus(const AvailabilityStatus& availabilityStatus) {
     availabilityStatus_ = availabilityStatus;
-
     dbusProxyStatusEvent_.notifyListeners(availabilityStatus);
+}
+
+const std::string& DBusProxy::getDBusBusName() const {
+    return dbusBusName_;
+}
+
+const std::string& DBusProxy::getDBusObjectPath() const {
+    return dbusObjectPath_;
+}
+
+const std::string& DBusProxy::getInterfaceName() const {
+    return dbusInterfaceName_;
+}
+
+const std::string& DBusProxy::getDomain() const {
+    return commonApiDomain_;
+}
+
+const std::string& DBusProxy::getServiceId() const {
+    return commonApiServiceId_;
+}
+
+const std::string& DBusProxy::getInstanceId() const {
+    return commonApiParticipantId_;
+}
 
-    return SubscriptionStatus::RETAIN;
+std::string DBusProxy::getAddress() const {
+    return commonApiDomain_ + ":" + commonApiServiceId_ + ":" + commonApiParticipantId_;
 }
 
 } // namespace DBus