Интерфейсные объекты Vala DBus Как зарегистрировать изменения свойств? - PullRequest
0 голосов
/ 03 ноября 2018

Таким образом, при написании интерфейса 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 и следить за изменениями свойств в них, но это тоже не совсем правильно.

Каков «правильный» способ решить эту проблему?

1 Ответ

0 голосов
/ 06 ноября 2018

Вы должны проверить, генерирует ли это свойство сигнал уведомления, вызвав org.freedesktop.DBus.Introspectable.Introspect, после чего вы можете подключиться к сигналу org.freedesktop.DBus.Properties.PropertiesChanged DBus. Больше информации в официальной спецификации и Vala

...