Re: [Vala] Using GDBus to Listen to Messages
- From: Luqman Aden <chaotic luqmanrocks co cc>
- To: JM <interflug1 gmx net>
- Cc: "vala-list gnome org" <vala-list gnome org>
- Subject: Re: [Vala] Using GDBus to Listen to Messages
- Date: Thu, 24 Feb 2011 16:34:40 -0500
Thank you for the examples provided but that is not what I'm trying to accomplish. I am trying to capture all
Desktop Notifications via DBUS.
On 2011-02-24, at 3:46 AM, JM <interflug1 gmx net> wrote:
Hello
Here is a client notification example fitting the server notifications I
wrote some time ago(
http://live.gnome.org/Vala/DBusServerSample#Service_with_D-Bus_property_change_notifications
)
--------------
Client:
[DBus (name = "org.example.Demo")]
public interface Demo : Object {
public abstract string pubprop { owned get; set; }
}
[DBus (name = "org.freedesktop.DBus.Properties")]
public interface NotifierProxy : Object {
public abstract signal void PropertiesChanged (string ifc,
HashTable<string, Variant> ht, string[] inv_prop);
}
void main () {
Demo demo = null;
NotifierProxy np = null;
try {
demo = Bus.get_proxy_sync (BusType.SESSION, "org.example.Demo",
"/org/example/demo");
}
catch (IOError e) {
stderr.printf ("%s\n", e.message);
}
try {
np = Bus.get_proxy_sync (BusType.SESSION, "org.example.Demo",
"/org/example/demo");
}
catch (IOError er) {
stderr.printf ("%s\n", er.message);
}
demo.pubprop = "jkfdgk";
np.PropertiesChanged.connect( (x, ht, i) => {
print("PropertiesChanged for %s\n", x);
});
new GLib.MainLoop().run();
}
-------------------
-------------------
Server:
[DBus (name = "org.example.Demo")]
public class DemoServer : Object {
public string pubprop { owned get; set; }
private weak DBusConnection conn;
public DemoServer (DBusConnection conn) {
this.conn = conn;
this.notify.connect (send_property_change);
}
private void send_property_change (ParamSpec p) {
var builder = new VariantBuilder (VariantType.ARRAY);
var invalid_builder = new VariantBuilder (new VariantType
("as"));
if (p.name == "pubprop") {
Variant i = pubprop;
builder.add ("{sv}", "pubprop", i);
}
try {
conn.emit_signal (null,
"/org/example/demo",
"org.freedesktop.DBus.Properties",
"PropertiesChanged",
new Variant ("(sa{sv}as)",
"org.example.Demo",
builder,
invalid_builder)
);
} catch (Error e) {
stderr.printf ("%s\n", e.message);
}
}
}
public class NotificationsTest : Object {
private DemoServer dserver;
public NotificationsTest () {
Bus.own_name (BusType.SESSION, "org.example.Demo",
BusNameOwnerFlags.NONE,
on_bus_acquired, on_name_acquired, on_name_lost);
}
private void on_bus_acquired (DBusConnection conn) {
print ("bus acquired\n");
try {
this.dserver = new DemoServer (conn);
conn.register_object ("/org/example/demo", this.dserver);
} catch (IOError e) {
print ("%s\n", e.message);
}
}
private void on_name_acquired () {
print ("name acquired\n");
}
private void on_name_lost () {
print ("name_lost\n");
}
public void setup_timeout () {
Timeout.add_seconds (4, () => {
dserver.pubprop = Random.next_int ().to_string ();
return true;
});
}
}
void main () {
var nt = new NotificationsTest ();
nt.setup_timeout ();
new MainLoop ().run ();
}
---------------------
Client and server should be compiled as usual with '--pkg gio-2.0'
option.
PS: I didn't check unpacking the PropertiesChanged args.
I also didn't check your code.
Hope it still helps.
Best Regards
Hello,
I've been experimenting with the prowl protocol and transferring
notifications from a linux system to an iDevice with it. I've thus far come
up with a python proof of concept. I wanted to rewrite this into Vala as an
exercise for myself mostly.
A little background first on how I capture the notifications. I basically
use the message filter feature of DBus to get the notifications, filtering
for interface=org.freedesktop.Notifications and member=Notify.
This is how I've done so using Python: http://codepad.org/dauMCxXY
At first with Vala I came up with this using dbus-glib:
http://codepad.org/JiFvX4vK
But I've since found out that dbus-glib has been deprecated and is not
recommended for use. The alternative being GDBus. Thus I attempted to create
an equivalent program using it: http://codepad.org/RorMIB4O
Unfortunately, this does not work as expected, as in not capturing the
notifications as desired. I'm not sure how to this using GDBus. I've asked
around in #vala on GIMPNet as well as #gtk.
_______________________________________________
vala-list mailing list
vala-list gnome org
http://mail.gnome.org/mailman/listinfo/vala-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]