Таким образом, при написании интерфейса vala для DBus он наследуется от Object. тем не менее, большинство свойств выглядят так: public string name { owned get; }
насколько я могу судить, это означает, что Notify никогда не срабатывает, если его значение изменяется (что, я полагаю, может быть, так как оно отражает интерфейс в dbus, что, безусловно, делает меняется.)
образец:
[DBus (name ="org.bluez.Device1")]
public interface Device : Object{
[DBus (name = "Connected")]
public abstract bool connected { owned get; }
[DBus (name = "Connect")]
public abstract void connect();
[DBus (name = "Disconnect")]
public abstract void disconnect();
}
public void print_device_status(Device device){
if(device.connected){
stdout.printf("Device is connected");
}else{
stdout.printf("device is disconnected!");
}
}
int main(string[] args){
string mac = "dev_14_A5_1A_7F_61_08";
Device device = Bus.get_proxy_sync(BusType.SYSTEM, "org.bluez", string.join("/","/org/bluez/hci0", mac));
string message = "";
device.notify.connect(() => ( print_device_status(device) ));
if(device.connected){
device.disconnect();
}
device.connect();
device.disconnect();
return 0;
}
Команда компиляции: valac --pkg gio-2.0 <file name> -o test
Методы подключения и отключения работают должным образом, print_device_status никогда не вызывается. Я могу только предположить, что это происходит потому, что notify никогда не срабатывает, и я предполагаю, что это потому, что в свойствах нет сеттеров.
Я знаю, что могу создавать объекты DBusProxy и следить за изменениями свойств в них, но это тоже не совсем правильно.
Каков «правильный» способ решить эту проблему?