1 // 2 // Copyright (C) 2014 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #include "shill/service_property_change_notifier.h" 18 19 #include <string> 20 21 #include <base/bind.h> 22 23 #include "shill/adaptor_interfaces.h" 24 #include "shill/property_observer.h" 25 26 using base::Bind; 27 using std::string; 28 29 namespace shill { 30 31 ServicePropertyChangeNotifier::ServicePropertyChangeNotifier( 32 ServiceAdaptorInterface* adaptor) : rpc_adaptor_(adaptor) {} 33 34 ServicePropertyChangeNotifier::~ServicePropertyChangeNotifier() {} 35 36 void ServicePropertyChangeNotifier::AddBoolPropertyObserver( 37 const string& name, BoolAccessor accessor) { 38 property_observers_.emplace_back( 39 new PropertyObserver<bool>( 40 accessor, 41 Bind(&ServicePropertyChangeNotifier::BoolPropertyUpdater, 42 base::Unretained(this), 43 name))); 44 } 45 46 void ServicePropertyChangeNotifier::AddUint8PropertyObserver( 47 const string& name, Uint8Accessor accessor) { 48 property_observers_.emplace_back( 49 new PropertyObserver<uint8_t>( 50 accessor, 51 Bind(&ServicePropertyChangeNotifier::Uint8PropertyUpdater, 52 base::Unretained(this), 53 name))); 54 } 55 56 void ServicePropertyChangeNotifier::AddUint16PropertyObserver( 57 const string& name, Uint16Accessor accessor) { 58 property_observers_.emplace_back( 59 new PropertyObserver<uint16_t>( 60 accessor, 61 Bind(&ServicePropertyChangeNotifier::Uint16PropertyUpdater, 62 base::Unretained(this), 63 name))); 64 } 65 66 void ServicePropertyChangeNotifier::AddUint16sPropertyObserver( 67 const string& name, Uint16sAccessor accessor) { 68 property_observers_.emplace_back( 69 new PropertyObserver<Uint16s>( 70 accessor, 71 Bind(&ServiceAdaptorInterface::EmitUint16sChanged, 72 base::Unretained(rpc_adaptor_), 73 name))); 74 } 75 76 void ServicePropertyChangeNotifier::AddUintPropertyObserver( 77 const string& name, Uint32Accessor accessor) { 78 property_observers_.emplace_back( 79 new PropertyObserver<uint32_t>( 80 accessor, 81 Bind(&ServicePropertyChangeNotifier::Uint32PropertyUpdater, 82 base::Unretained(this), 83 name))); 84 } 85 86 void ServicePropertyChangeNotifier::AddIntPropertyObserver( 87 const string& name, Int32Accessor accessor) { 88 property_observers_.emplace_back( 89 new PropertyObserver<int32_t>( 90 accessor, 91 Bind(&ServicePropertyChangeNotifier::Int32PropertyUpdater, 92 base::Unretained(this), 93 name))); 94 } 95 96 void ServicePropertyChangeNotifier::AddRpcIdentifierPropertyObserver( 97 const string& name, RpcIdentifierAccessor accessor) { 98 property_observers_.emplace_back( 99 new PropertyObserver<string>( 100 accessor, 101 Bind(&ServiceAdaptorInterface::EmitRpcIdentifierChanged, 102 base::Unretained(rpc_adaptor_), 103 name))); 104 } 105 106 void ServicePropertyChangeNotifier::AddStringPropertyObserver( 107 const string& name, StringAccessor accessor) { 108 property_observers_.emplace_back( 109 new PropertyObserver<string>( 110 accessor, 111 Bind(&ServiceAdaptorInterface::EmitStringChanged, 112 base::Unretained(rpc_adaptor_), 113 name))); 114 } 115 116 void ServicePropertyChangeNotifier::AddStringmapPropertyObserver( 117 const string& name, StringmapAccessor accessor) { 118 property_observers_.emplace_back( 119 new PropertyObserver<Stringmap>( 120 accessor, 121 Bind(&ServiceAdaptorInterface::EmitStringmapChanged, 122 base::Unretained(rpc_adaptor_), 123 name))); 124 } 125 126 void ServicePropertyChangeNotifier::UpdatePropertyObservers() { 127 for (const auto& observer : property_observers_) { 128 observer->Update(); 129 } 130 } 131 132 void ServicePropertyChangeNotifier::BoolPropertyUpdater(const string& name, 133 const bool& value) { 134 rpc_adaptor_->EmitBoolChanged(name, value); 135 } 136 137 void ServicePropertyChangeNotifier::Uint8PropertyUpdater(const string& name, 138 const uint8_t& value) { 139 rpc_adaptor_->EmitUint8Changed(name, value); 140 } 141 142 void ServicePropertyChangeNotifier::Uint16PropertyUpdater( 143 const string& name, const uint16_t& value) { 144 rpc_adaptor_->EmitUint16Changed(name, value); 145 } 146 147 void ServicePropertyChangeNotifier::Uint32PropertyUpdater( 148 const string& name, const uint32_t& value) { 149 rpc_adaptor_->EmitUintChanged(name, value); 150 } 151 152 void ServicePropertyChangeNotifier::Int32PropertyUpdater(const string& name, 153 const int32_t& value) { 154 rpc_adaptor_->EmitIntChanged(name, value); 155 } 156 157 } // namespace shill 158