[gnome-games/sudoku-tube] Catch exceptions when get_object



commit 8a6de65575f9e30234ed8624a954ccbe544d5e87
Author: Zhang Sen <zh jesse gmail com>
Date:   Tue Aug 11 19:44:08 2009 +0800

    Catch exceptions when get_object
    
    Catch dbus.exceptions.DBusException: Connection is disconnected - unable to
    make method call. Not sure how this happens.

 gnome-sudoku/src/lib/main.py |   32 ++++++++++++++++++++++++--------
 1 files changed, 24 insertions(+), 8 deletions(-)
---
diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index 40215d3..eee7875 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -519,10 +519,11 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
         self._tube[tp_tube.CHANNEL_INTERFACE].connect_to_signal(
                 'Closed', self._tube_closed_cb)
 
-        myself = networking.Peer(bus, self._receiver_obj_path, self)
-        self._peer = bus.get_object(object_path=self._initiator_obj_path)
+        if not self._negotiate_peer_proxy(bus):
+            return
+
         self._peer.get_puzzle(
-                dbus_interface="org.gnome.Sudoku.view",
+                dbus_interface=networking.view_interface,
                 reply_handler=self._got_remote_puzzle_cb,
                 error_handler=error_cb)
 
@@ -532,7 +533,7 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
         assert len(puzzle) == 81
         self._open_game(game_selector.NewOrSavedGameSelector.NEW_GAME, puzzle)
         self._init_side_view_display()
-        self._negotiate_sideview(self._bus)
+        self._negotiate_sideview_proxy(self._bus)
 
     def _tube_offered_cb(self, offer, bus, tube):
         """Called when the peer accepts our tube"""
@@ -545,11 +546,26 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
         # string. FIXME
         self._auto_open_game(check_saved=False)
 
-        myself = networking.Peer(bus, self._initiator_obj_path, self)
-        self._peer = bus.get_object(object_path=self._receiver_obj_path)
+        if not self._negotiate_peer_proxy(bus):
+            return
 
         self._init_side_view_display()
-        self._negotiate_sideview(bus)
+        self._negotiate_sideview_proxy(bus)
+
+    def _negotiate_peer_proxy(self, bus):
+        assert self._is_initiator is not None
+        if self._is_initiator:
+            me, peer = self._initiator_obj_path, self._receiver_obj_path
+        else:
+            me, peer = self._receiver_obj_path, self._initiator_obj_path
+
+        myself = networking.Peer(bus, me, self)
+        try:
+            self._peer = bus.get_object(object_path=peer)
+        except DBusException as err:
+            logger.error("Error when contacting with initiator: %s" % err)
+            return False
+        return True
 
     def get_puzzle(self):
         return self._puzzle.replace(" ", "") # delete all spaces
@@ -562,7 +578,7 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
                 if val:
                     self._side_grid_vew.set_value(x, y, val)
 
-    def _negotiate_sideview(self, bus):
+    def _negotiate_sideview_proxy(self, bus):
         receiver_view = self._view_obj_path + "/receiver"
         initiator_view = self._view_obj_path + "/initiator"
         if self._is_initiator:



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