connect method

Future<void> connect()

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);
  });
}