From 6412e09f3140f6496acf29dae0fcd1c75d517c74 Mon Sep 17 00:00:00 2001 From: Huang Peng Date: Mon, 14 Jul 2008 13:59:53 +0100 Subject: Demo code for Server APIs --- examples/dbusserver/client.py | 21 ++++++++++++++ examples/dbusserver/server.py | 66 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100755 examples/dbusserver/client.py create mode 100755 examples/dbusserver/server.py diff --git a/examples/dbusserver/client.py b/examples/dbusserver/client.py new file mode 100755 index 0000000..ad92f43 --- /dev/null +++ b/examples/dbusserver/client.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +import dbus +import dbus.mainloop.glib +import os +import gobject +import time + + +def main(): + loop = gobject.MainLoop () + bus = dbus.SessionBus () + obj = bus.get_object ("org.freedesktop.DBus", "/org/freedesktop/DBus") + while True: + print obj.HelloWorld ("[%s][%s]" % (time.time(), bus.get_unique_name())) + time.sleep (1) + loop.run () + +if __name__ == "__main__": + os.environ["DBUS_SESSION_BUS_ADDRESS"]="unix:abstract=/tmp/ibus" + dbus.mainloop.glib.DBusGMainLoop (set_as_default=True) + main () diff --git a/examples/dbusserver/server.py b/examples/dbusserver/server.py new file mode 100755 index 0000000..1a4997c --- /dev/null +++ b/examples/dbusserver/server.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +import dbus +import dbus.server +import dbus.lowlevel +import dbus.service +import dbus.mainloop.glib +import gobject + +class DBusObject (dbus.service.Object): + SUPPORTS_MULTIPLE_CONNECTIONS = True + def __init__ (self): + dbus.service.Object.__init__ (self) + self._max_id = 1 + + @dbus.service.method (dbus_interface="org.freedesktop.DBus", out_signature="s") + def Hello (self): + print "Hello is called" + name = "ibus.%d" % self._max_id + self._max_id = self._max_id +1 + return name + + @dbus.service.method (dbus_interface="org.freedesktop.DBus", in_signature="s", out_signature="s") + def HelloWorld (self, s): + print "HelloWorld [%s]" %s + return "Return HelloWorld [%s]" %s + +class IBusManager (dbus.server.Server): + def __init__ (self): + dbus.server.Server.__init__ (self, "unix:abstract=/tmp/ibus") + + def new_connection (self, server, connection): + connection.add_message_filter (self.message_filter_cb) + print "got a new connection" + + def remove_connection (self, connection): + print "A connection is disconnected" + + def message_filter_cb (self, connection, message): + if message.get_interface() == "org.freedesktop.DBus.Local" and \ + message.get_member() == "Disconnected": + print "Disconnected" + return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED + + print "Got a Message (%s) : " % message.__class__.__name__ + print "\t From: %s" % message.get_sender () + print "\t To: %s" % message.get_destination () + print "\t Interface: %s" % message.get_interface () + print "\t Path: %s" % message.get_path () + print "\t Member: %s" % message.get_member () + print "\t Arguments:" + i = 0 + for arg in message.get_args_list(): + print "\t\t Arg[%d] : %s" % (i, arg) + i = i + 1 + + return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED + +if __name__ == "__main__": + dbus.mainloop.glib.DBusGMainLoop (set_as_default = True) + loop = gobject.MainLoop () + bus = IBusManager () + bus.register_object (DBusObject (), "/org/freedesktop/DBus") + print "DBUS_SESSION_BUS_ADDRESS=\"%s\"" % bus.get_address () + loop.run () + -- cgit v1.2.1