1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
Packages: gio-2.0
D-Bus
Program: client
[DBus (name = "org.example.Test")]
public interface Test : Object {
public abstract string test_property { owned get; set; }
public signal void test_signal (int i);
public abstract int test_method (int j, int k) throws IOError;
}
[DBus (name = "org.example.Test")]
public interface TestRaw : Object {
[DBus (signature = "s")]
public abstract Variant test_property { owned get; set; }
public signal void test_signal ([DBus (signature = "i")] Variant i);
[DBus (signature = "i")]
public abstract Variant test_method ([DBus (signature = "i")] Variant j, [DBus (signature = "i")] Variant k) throws IOError;
}
void test_raw (TestRaw test) {
var main_loop = new MainLoop ();
var id = test.test_signal.connect ((var_i) => {
var i = (int) var_i;
assert (i == 46);
main_loop.quit ();
});
int j = (int) test.test_method (23, 11);
assert (j == 42);
main_loop.run ();
test.disconnect (id);
test.test_property = "hello";
var s = (string) test.test_property;
assert (s == "hello");
}
void test (Test test) {
var main_loop = new MainLoop ();
var id = test.test_signal.connect ((i) => {
assert (i == 46);
main_loop.quit ();
});
int j = test.test_method (23, 11);
assert (j == 42);
main_loop.run ();
test.disconnect (id);
test.test_property = "hello";
var s = test.test_property;
assert (s == "hello");
}
void main () {
// raw variant server, standard client
Test test1 = Bus.get_proxy_sync (BusType.SESSION, "org.example.Test", "/org/example/testraw", DBusProxyFlags.DO_NOT_LOAD_PROPERTIES);
test (test1);
// standard server, raw variant client
TestRaw test2 = Bus.get_proxy_sync (BusType.SESSION, "org.example.Test", "/org/example/test", DBusProxyFlags.DO_NOT_LOAD_PROPERTIES);
test_raw (test2);
// raw variant server, raw variant client
TestRaw test3 = Bus.get_proxy_sync (BusType.SESSION, "org.example.Test", "/org/example/testraw", DBusProxyFlags.DO_NOT_LOAD_PROPERTIES);
test_raw (test3);
}
Program: server
[DBus (name = "org.example.Test")]
public class Test : Object {
public string test_property { owned get; set; }
public signal void test_signal (int i);
public int test_method (int j, int k) {
assert (j == 23);
assert (k == 11);
test_signal (46);
return 42;
}
}
[DBus (name = "org.example.Test")]
public class TestRaw : Object {
[DBus (signature = "s")]
public Variant test_property { owned get; set; }
public signal void test_signal ([DBus (signature = "i")] Variant i);
[DBus (signature = "i")]
public Variant test_method ([DBus (signature = "i")] Variant j, [DBus (signature = "i")] Variant k) {
assert ((int) j == 23);
assert ((int) k == 11);
test_signal (46);
return 42;
}
}
MainLoop main_loop;
void client_exit (Pid pid, int status) {
// client finished, terminate server
assert (status == 0);
main_loop.quit ();
}
void main () {
var conn = Bus.get_sync (BusType.SESSION);
conn.register_object ("/org/example/test", new Test ());
conn.register_object ("/org/example/testraw", new TestRaw ());
// try to register service in session bus
var request_result = conn.call_sync ("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "RequestName",
new Variant ("(su)", "org.example.Test", 0x4), null, 0, -1);
assert ((uint) request_result.get_child_value (0) == 1);
// server ready, spawn client
Pid client_pid;
Process.spawn_async (null, { "dbus_rawvariants_client" }, null, SpawnFlags.DO_NOT_REAP_CHILD, null, out client_pid);
ChildWatch.add (client_pid, client_exit);
main_loop = new MainLoop ();
main_loop.run ();
}
|