[gnome-games/sudoku-tube: 2/2] Add tube-handler



commit 230fb2a1a506eb56492e0673f18a82dadbaaf0c4
Author: Zhang Sen <zh jesse gmail com>
Date:   Mon May 25 21:34:18 2009 +0800

    Add tube-handler
    
    When sudoku launched, create a service on dbus listensing to tubes.
---
 gnome-sudoku/src/lib/main.py    |    6 ++++
 gnome-sudoku/src/lib/tp_tube.py |   53 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index b9489a0..9ae99cc 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -26,6 +26,8 @@ from defaults import (APPNAME, APPNAME_SHORT, AUTHORS, COPYRIGHT, DESCRIPTION,
 from gtk_goodies import gconf_wrapper, Undo, dialog_extras
 from simple_debug import simple_debug, options
 
+import tp_tube
+
 ICON_FACTORY = gtk.IconFactory()
 STOCK_PIXBUFS = {}
 for filename, stock_id in [('footprints.png', 'tracks'), ]:
@@ -165,6 +167,10 @@ class UI (gconf_wrapper.GConfWrapper):
                                             gconf_wrapper.GConf('gnome-sudoku')
                                             )
         self.setup_gui()
+
+        tube_service = 'org.gnome.Sudoku'
+        bus_name, tube_handler = tp_tube.create_tube_handler(tube_service)
+
         self.timer = timer.ActiveTimer(self.w)
         self.won = False
         # add the accelerator group to our toplevel window
diff --git a/gnome-sudoku/src/lib/tp_tube.py b/gnome-sudoku/src/lib/tp_tube.py
new file mode 100644
index 0000000..8027e06
--- /dev/null
+++ b/gnome-sudoku/src/lib/tp_tube.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+
+import dbus
+import dbus.service
+
+from telepathy.client.conn import Connection
+from telepathy.client.channel import Channel
+from telepathy.interfaces import CHANNEL_TYPE_DBUS_TUBE
+
+from dbus.mainloop.glib import DBusGMainLoop
+DBusGMainLoop(set_as_default=True)
+
+def create_tube_handler (service_name):
+    """Create a DBus service on SessionBus and create tube handler on it
+
+    Return the created BusName and the TubeHandler"""
+    bus = dbus.SessionBus()
+    # the 'service', or 'bus name', or 'connection'
+    handler_name = "org.gnome.Empathy.DTubeHandler.%s" % service_name
+    # the object path on the above connection/service
+    handler_path = "/org/gnome/Empathy/DTubeHandler/%s" % \
+            service_name.replace('.','/')
+
+    bus_name = dbus.service.BusName(handler_name, bus)
+    tube_handler = TubeHandler(bus, handler_path)
+    return bus_name, tube_handler
+
+
+class TubeHandler (dbus.service.Object):
+    """Listen to coming tube and emit a signal for it"""
+
+    @dbus.service.method(dbus_interface="org.gnome.Empathy.TubeHandler",
+            in_signature='soouu', out_signature='')
+    def HandleTube(self, bus_name, connection, channel, handle_type, handle):
+        """Called when we are offered a tube"""
+        conn = Connection(bus_name, connection)
+        chan = Channel(bus_name, channel)
+
+        address = chan[CHANNEL_TYPE_DBUS_TUBE].Accept()
+        tube_conn = dbus.connection.Connection(address)
+
+        print 'emit a signal that connection is ready'
+
+
+def _test ():
+    """do some test-running"""
+    import gtk
+    name, handler = create_tube_handler('org.gnome.sudoku.test')
+    gtk.main()
+
+
+if __name__ == '__main__':
+    _test()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]