Mercurial > libervia-backend
diff src/plugins/plugin_misc_room_game.py @ 1970:200cd707a46d
plugin XEP-0045, quick_frontend + primitivus (chat): cleaning of XEP-0045 (first pass):
- bridge methods/signals now all start with "muc" to follow new convention
- internal method use client instead of profile to follow new convention
- removed excetpions from plugin XEP-0045 in favor of core.exceptions, NotReady added
- cleaned/simplified several part of the code. checkClient removed as it is not needed anymore
- self.clients map removed, muc data are now stored directly in client
- getRoomEntityNick and getRoomNicksOfUsers are removed as they don't look sane.
/!\ This break all room game plugins for the moment
- use of uuid4 instead of uuid1 for getUniqueName, as host ID and current time are used for uuid1
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 27 Jun 2016 21:45:11 +0200 |
parents | 2daf7b4c6756 |
children | 6a66c8c5a567 |
line wrap: on
line diff
--- a/src/plugins/plugin_misc_room_game.py Fri Jun 24 22:41:28 2016 +0200 +++ b/src/plugins/plugin_misc_room_game.py Mon Jun 27 21:45:11 2016 +0200 @@ -48,6 +48,8 @@ } +# FIXME: this plugin is broken, need to be fixed + class RoomGame(object): """This class is used to help launching a MUC game. @@ -123,7 +125,7 @@ host.trigger.add("MUC user joined", self.userJoinedTrigger) host.trigger.add("MUC user left", self.userLeftTrigger) - def _createOrInvite(self, room, other_players, profile): + def _createOrInvite(self, room_jid, other_players, profile): """ This is called only when someone explicitly wants to play. @@ -131,22 +133,24 @@ also its creation could be postponed until all the expected players join the room (in that case it will be created from userJoinedTrigger). @param room (wokkel.muc.Room): the room - @param other_players (list[jid.JID]): list of the other players JID (bare) + @param other_players (list[jid.JID]): list of the other players JID (bare) """ + # FIXME: broken ! + raise NotImplementedError("To be fixed") + client = self.host.getClient(profile) user_jid = self.host.getJidNStream(profile)[0] - room_jid = room.occupantJID.userhostJID() - nick = self.host.plugins["XEP-0045"].getRoomNick(room_jid, profile) + nick = self.host.plugins["XEP-0045"].getRoomNick(client, room_jid) nicks = [nick] if self._gameExists(room_jid): if not self._checkJoinAuth(room_jid, user_jid, nick): return - nicks.extend(self._invitePlayers(room, other_players, nick, profile)) + nicks.extend(self._invitePlayers(room_jid, other_players, nick, profile)) self._updatePlayers(room_jid, nicks, True, profile) else: self._initGame(room_jid, nick) - (auth, waiting, missing) = self._checkWaitAuth(room, other_players) + (auth, waiting, missing) = self._checkWaitAuth(room_jid, other_players) nicks.extend(waiting) - nicks.extend(self._invitePlayers(room, missing, nick, profile)) + nicks.extend(self._invitePlayers(room_jid, missing, nick, profile)) if auth: self.createGame(room_jid, nicks, profile) else: @@ -300,15 +304,15 @@ """ return [] - def _invitePlayers(self, room, other_players, nick, profile): + def _invitePlayers(self, room_jid, other_players, nick, profile): """Invite players to a room, associated game may exist or not. - @param room (wokkel.muc.Room): the room @param other_players (list[jid.JID]): list of the players to invite @param nick (unicode): nick of the user who send the invitation @return: list[unicode] of room nicks for invited players who are already in the room """ - room_jid = room.occupantJID.userhostJID() + raise NotImplementedError("Need to be fixed !") + # FIXME: this is broken and unsecure ! if not self._checkInviteAuth(room_jid, nick): return [] # TODO: remove invitation waiting for too long, using the time data @@ -316,7 +320,7 @@ nicks = [] for player_jid in [player.userhostJID() for player in other_players]: # TODO: find a way to make it secure - other_nick = self.host.plugins["XEP-0045"].getRoomNickOfUser(room, player_jid, secure=self.testing) + other_nick = self.host.plugins["XEP-0045"].getRoomEntityNick(room_jid, player_jid, secure=self.testing) if other_nick is None: self.host.plugins["XEP-0249"].invite(player_jid, room_jid, {"game": self.name}, profile) else: @@ -397,8 +401,9 @@ @param profile_key (unicode): %(doc_profile_key)s @return: jid.JID (unique name for a new room to be created) """ + client = self.host.getClient(profile_key) # FIXME: jid.JID must be used instead of strings - room = self.host.plugins["XEP-0045"].getUniqueName(muc_service, profile_key=profile_key) + room = self.host.plugins["XEP-0045"].getUniqueName(client, muc_service) return jid.JID("sat_%s_%s" % (self.name.lower(), room.userhost())) def _prepareRoom(self, other_players=None, room_jid_s='', profile_key=C.PROF_KEY_NONE): @@ -413,6 +418,8 @@ @param room_jid (jid.JID): JID of the room, or None to generate a unique name @param profile_key (unicode): %(doc_profile_key)s """ + # FIXME: need to be refactored + client = self.host.getClient(profile_key) log.debug(_(u'Preparing room for %s game') % self.name) profile = self.host.memory.getProfileName(profile_key) if not profile: @@ -421,21 +428,17 @@ if other_players is None: other_players = [] - def roomJoined(room): - """@param room: instance of wokkel.muc.Room""" - self._createOrInvite(room, other_players, profile) - # Create/join the given room, or a unique generated one if no room is specified. if room_jid is None: room_jid = self.getUniqueName(profile_key=profile_key) else: - if room_jid in self.host.plugins["XEP-0045"].clients[profile].joined_rooms: - roomJoined(self.host.plugins["XEP-0045"].clients[profile].joined_rooms[room_jid]) - return defer.succeed(None) + self.host.plugins["XEP-0045"].checkRoomJoined(client, room_jid) + self._createOrInvite(client, room_jid, other_players) + return defer.succeed(None) user_jid = self.host.getJidNStream(profile)[0] d = self.host.plugins["XEP-0045"].join(room_jid, user_jid.user, {}, profile) - return d.addCallback(roomJoined) + return d.addCallback(lambda dummy: self._createOrInvite(client, room_jid, other_players)) def userJoinedTrigger(self, room, user, profile): """This trigger is used to check if the new user can take part of a game, create the game if we were waiting for him or just update the players list.