[gnome-games/sudoku-tube: 2/2] Add tube-handler
- From: Zhang Sen <zhangsen src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-games/sudoku-tube: 2/2] Add tube-handler
- Date: Mon, 25 May 2009 10:09:11 -0400 (EDT)
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]