diff options
author | Morgan Collett <morgan.collett@collabora.co.uk> | 2007-07-02 13:55:06 (GMT) |
---|---|---|
committer | Morgan Collett <morgan.collett@collabora.co.uk> | 2007-07-02 13:55:06 (GMT) |
commit | 193c604d9d213f7e7d4ec717c1097cf2e73a344a (patch) | |
tree | 2acb974208bfd08024ff2a6d5d668ec55ed041fb | |
parent | 326aa36a9e8745870e7f09515dd1d897e9e374c9 (diff) |
Add ordered bus names
-rw-r--r-- | activity.py | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/activity.py b/activity.py index 6bcf6bb..11ef012 100644 --- a/activity.py +++ b/activity.py @@ -226,13 +226,16 @@ class HelloTube(ExportedGObject): """The bit that talks over the TUBES!!!""" def __init__(self, tube, is_initiator, get_buddy): + self._logger = logging.getLogger('hellomesh-activity.HelloTube') self.tube = tube self.is_initiator = is_initiator self.entered = False # Have we set up the tube? self.helloworld = False # Have we said Hello and received World? self._get_buddy = get_buddy # Converts handle to Buddy object + + self.ordered_bus_names = [] + self.tube.watch_participants(self.participant_change_cb) - self._logger = logging.getLogger('hellomesh-activity.HelloTube') def participant_change_cb(self, added, removed): self._logger.debug('Adding participants: %r' % added) @@ -247,13 +250,20 @@ class HelloTube(ExportedGObject): buddy = self._get_buddy(handle) if buddy is not None: self._logger.debug('Buddy %s was removed' % buddy.props.nick) - # Do activity logic with new or removed buddies + try: + self.ordered_bus_names.remove(self.tube.participants[handle]) + except ValueError: + # already absent + pass if not self.entered: #self.tube.add_signal_receiver(self.insert_cb, 'Insert', IFACE, # path=PATH, sender_keyword='sender') if self.is_initiator: + self._logger.debug("I'm initiating the tube, will " + "watch for hellos.") self.add_hello_handler() + self.ordered_bus_names = [self.tube.get_unique_name()] else: self._logger.debug('Hello, everyone! What did I miss?') self.Hello() @@ -265,10 +275,11 @@ class HelloTube(ExportedGObject): self._logger.debug('I said Hello.') @method(dbus_interface=IFACE, in_signature='as', out_signature='') - def World(self, name): + def World(self, bus_names): """To be called on the incoming XO after they Hello.""" - if not self.helloworld: - self._logger.debug('%s said World.') + if not 1 or self.helloworld: # XXX remove 1 + self._logger.debug('Somebody said World.') + self.ordered_bus_names = bus_names # now I can World others self.add_hello_handler() @@ -277,6 +288,7 @@ class HelloTube(ExportedGObject): self._logger.debug("I've already been welcomed, doing nothing") def add_hello_handler(self): + self._logger.debug('Adding hello handler.') self.tube.add_signal_receiver(self.hello_cb, 'Hello', IFACE, path=PATH, sender_keyword='sender') @@ -284,9 +296,6 @@ class HelloTube(ExportedGObject): """Somebody Helloed me. World them.""" self._logger.debug('Newcomer %s has joined', sender) self.ordered_bus_names.append(sender) - if len(self.ordered_bus_names) == 2: - buddy = self._get_buddy(self.tube.bus_name_to_handle[sender]) - self.buddies_panel.add_player(buddy) self._logger.debug('Bus names are now: %r', self.ordered_bus_names) self._logger.debug('Welcoming newcomer and sending them the game state') self.tube.get_object(sender, PATH).World(self.ordered_bus_names, |