Initial import to Git
[profile/ivi/common-api-dbus-runtime.git] / src / CommonAPI / DBus / DBusServiceStatusEvent.cpp
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 #include "DBusServiceStatusEvent.h"
5 #include "DBusServiceRegistry.h"
6 #include <cassert>
7
8 namespace CommonAPI {
9 namespace DBus {
10
11 DBusServiceStatusEvent::DBusServiceStatusEvent(std::shared_ptr<DBusServiceRegistry> registry) :
12                 registry_(registry) {
13 }
14
15 void DBusServiceStatusEvent::onFirstListenerAdded(const std::string& serviceName, const Listener& listener) {
16     if (registry_) {
17         registry_->registerAvailabilityListener(serviceName, std::bind(
18                         &DBusServiceStatusEvent::availabilityEvent,
19                         this,
20                         serviceName,
21                         std::placeholders::_1));
22     }
23 }
24
25 void DBusServiceStatusEvent::availabilityEvent(const std::string& name, const bool& available) {
26
27     const AvailabilityStatus availabilityStatus = !available ? AvailabilityStatus::NOT_AVAILABLE :
28                                                                AvailabilityStatus::AVAILABLE;
29     notifyListeners(name, availabilityStatus);
30 }
31
32 void DBusServiceStatusEvent::onListenerAdded(const std::string& name, const Listener& listener) {
33     if (registry_) {
34         const AvailabilityStatus availabilityStatus =
35                         !registry_->isServiceInstanceAlive(name) ? AvailabilityStatus::NOT_AVAILABLE :
36                                         AvailabilityStatus::AVAILABLE;
37
38         notifyListeners(name, availabilityStatus);
39     }
40
41 }
42
43 } // namespace DBus
44 } // namespace CommonAPI