connect method
Connects to the NetworkManager D-Bus objects. Must be called before accessing methods and properties.
Implementation
Future<void> connect() async {
// Already connected
if (_objectManagerSubscription != null) {
return;
}
// Subscribe to changes
_objectManagerSubscription = _root.signals.listen((signal) {
if (signal is DBusObjectManagerInterfacesAddedSignal) {
var object = _objects[signal.changedPath];
if (object != null) {
object.updateInterfaces(signal.interfacesAndProperties);
} else {
object = _NetworkManagerObject(
_bus, signal.changedPath, signal.interfacesAndProperties);
_objects[signal.changedPath] = object;
if (object.interfaces.containsKey(_deviceInterfaceName)) {
_deviceAddedStreamController
.add(NetworkManagerDevice(this, object));
} else if (object.interfaces
.containsKey(_activeConnectionInterfaceName)) {
_activeConnectionAddedStreamController
.add(NetworkManagerActiveConnection(this, object));
}
}
} else if (signal is DBusObjectManagerInterfacesRemovedSignal) {
var object = _objects[signal.changedPath];
if (object != null) {
// If all the interface are removed, then this object has been removed.
// Keep the previous values around for the client to use.
if (object.wouldRemoveAllInterfaces(signal.interfaces)) {
_objects.remove(signal.changedPath);
} else {
object.removeInterfaces(signal.interfaces);
}
if (signal.interfaces.contains(_deviceInterfaceName)) {
_deviceRemovedStreamController
.add(NetworkManagerDevice(this, object));
}
if (signal.interfaces.contains(_activeConnectionInterfaceName)) {
_activeConnectionRemovedStreamController
.add(NetworkManagerActiveConnection(this, object));
}
}
} else if (signal is DBusPropertiesChangedSignal) {
var object = _objects[signal.path];
if (object != null) {
object.updateProperties(
signal.propertiesInterface, signal.changedProperties);
}
}
});
// Find all the objects exported.
var objects = await _root.getManagedObjects();
objects.forEach((objectPath, interfacesAndProperties) {
_objects[objectPath] =
_NetworkManagerObject(_bus, objectPath, interfacesAndProperties);
});
}