[gnome-games/sudoku-tube] Block the initiator until the receiver decides
- From: Zhang Sen <zhangsen src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-games/sudoku-tube] Block the initiator until the receiver decides
- Date: Fri, 14 Aug 2009 11:04:09 +0000 (UTC)
commit 7babc621836157357289ed8daeccafc10cdef7aa
Author: Zhang Sen <zh jesse gmail com>
Date: Fri Aug 14 19:02:51 2009 +0800
Block the initiator until the receiver decides
gnome-sudoku/src/lib/main.py | 34 +--------------------------
gnome-sudoku/src/lib/tube_handler.py | 41 +++++++++++++++++++++++++++++----
2 files changed, 38 insertions(+), 37 deletions(-)
---
diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index 09e23a4..fb5764b 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -79,7 +79,7 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
self.setup_gui()
self.tube_handler = tube_handler.TubeHandler(self._tube_service,
- tube_received_cb=self._tube_incoming_cb)
+ tube_received_cb=self._process_accepted_tube)
self.timer = timer.ActiveTimer(self.w)
self.won = False
@@ -516,38 +516,8 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
self._wait_dialog.vbox.pack_start(fail_label)
self._wait_dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)
- def _tube_incoming_cb(self, bus, tube, params):
- """Called when we receive a tube"""
-
- def reply_cb(dialog, response_id):
- if response_id == gtk.RESPONSE_ACCEPT:
- self._process_accepted_tube(bus, tube, puzzle)
- else:
- print 'do nothing; reply to initiator'
-
- try:
- puzzle = params['puzzle']
- except KeyError:
- logger.error("expected parameter missing from %s" % params)
- return # do nothing
-
- puzzle = str(puzzle)
- logger.debug('got offer: %s' % puzzle)
-
- dialog = gtk.Dialog("New game offer",
- self.w,
- gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
- (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT,
- gtk.STOCK_NO, gtk.RESPONSE_REJECT))
- label = gtk.Label("<get-contact> wants to play with you")
- label.show()
- dialog.vbox.pack_start(label)
- dialog.connect("response", reply_cb)
- dialog.run()
- dialog.destroy()
-
def _process_accepted_tube(self, bus, tube, puzzle):
- """User has decided to accept the tube
+ """User has accepted the tube
"""
assert self._is_initiator is None
diff --git a/gnome-sudoku/src/lib/tube_handler.py b/gnome-sudoku/src/lib/tube_handler.py
index 54683fb..d04c141 100644
--- a/gnome-sudoku/src/lib/tube_handler.py
+++ b/gnome-sudoku/src/lib/tube_handler.py
@@ -4,6 +4,7 @@ import logging
import dbus
import dbus.service
+import gtk
from dbus import PROPERTIES_IFACE
from dbus.mainloop.glib import DBusGMainLoop
@@ -13,6 +14,7 @@ from telepathy.constants import (
TUBE_STATE_OPEN,
SOCKET_ACCESS_CONTROL_CREDENTIALS)
from telepathy.interfaces import (
+ CHANNEL_INTERFACE,
CHANNEL_INTERFACE_TUBE,
CHANNEL_TYPE_DBUS_TUBE)
@@ -61,15 +63,44 @@ class TubeHandler(dbus.service.Object):
self._tube_chan[CHANNEL_INTERFACE_TUBE].connect_to_signal(
'TubeChannelStateChanged', self._tube_state_changed_cb)
- self._address = self._tube_chan[CHANNEL_TYPE_DBUS_TUBE].Accept(
- SOCKET_ACCESS_CONTROL_CREDENTIALS)
+ params = self._tube_chan[PROPERTIES_IFACE].Get(
+ CHANNEL_INTERFACE_TUBE, 'Parameters')
+ self._process_incoming_tube(params)
def _tube_state_changed_cb(self, state):
if state == TUBE_STATE_OPEN:
logger.debug("Tube state changed ->open")
bus = dbus.connection.Connection(self._address)
- params = self._tube_chan[PROPERTIES_IFACE].Get(
- CHANNEL_INTERFACE_TUBE, 'Parameters')
- self._tube_received_cb(bus, self._tube_chan, params)
+ self._tube_received_cb(bus, self._tube_chan, self._puzzle)
else:
logger.debug("Tube state changed ->%s" % state)
+
+ def _process_incoming_tube(self, params):
+ def reply_cb(dialog, response_id):
+ if response_id == gtk.RESPONSE_ACCEPT:
+ logger.debug("accept tube")
+ self._address = self._tube_chan[CHANNEL_TYPE_DBUS_TUBE].Accept(
+ SOCKET_ACCESS_CONTROL_CREDENTIALS)
+ else:
+ logger.debug("deny tube offer")
+ self._tube_chan[CHANNEL_INTERFACE].Close()
+ try:
+ puzzle = params['puzzle']
+ except KeyError:
+ logger.error("expected parameter missing from %s" % params)
+ return # do nothing
+
+ self._puzzle = str(puzzle)
+ logger.debug('got offer: %s' % self._puzzle)
+
+ dialog = gtk.Dialog("New game offer",
+ parent=None,
+ flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+ buttons=(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT,
+ gtk.STOCK_NO, gtk.RESPONSE_REJECT))
+ label = gtk.Label("<get-contact> wants to play with you")
+ label.show()
+ dialog.vbox.pack_start(label)
+ dialog.connect("response", reply_cb)
+ dialog.run()
+ dialog.destroy()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]