diff src/plugins/plugin_misc_quiz.py @ 2129:6a66c8c5a567

core: replaced calls to client.xmlstream.send by client.send which is the right method to use. client.xmlstream should not be used directly
author Goffi <goffi@goffi.org>
date Sat, 04 Feb 2017 17:59:13 +0100
parents 2daf7b4c6756
children 33c8c4973743
line wrap: on
line diff
--- a/src/plugins/plugin_misc_quiz.py	Wed Feb 01 21:44:24 2017 +0100
+++ b/src/plugins/plugin_misc_quiz.py	Sat Feb 04 17:59:13 2017 +0100
@@ -22,13 +22,8 @@
 from sat.core.log import getLogger
 log = getLogger(__name__)
 from twisted.words.xish import domish
-from twisted.internet import protocol, defer, threads, reactor
-from twisted.words.protocols.jabber import client, jid, xmlstream
-from twisted.words.protocols import jabber
-from twisted.words.protocols.jabber.xmlstream import IQ
-import random
-
-from wokkel import data_form
+from twisted.internet import reactor
+from twisted.words.protocols.jabber import client as jabber_client, jid
 from time import time
 
 
@@ -169,35 +164,34 @@
 
     def __start_play(self, room_jid, game_data, profile):
         """Start the game (tell to the first player after dealer to play"""
+        client = self.host.getClient(profile)
         game_data['stage'] = "play"
         next_player_idx = game_data['current_player'] = (game_data['init_player'] + 1) % len(game_data['players'])  # the player after the dealer start
         game_data['first_player'] = next_player = game_data['players'][next_player_idx]
         to_jid = jid.JID(room_jid.userhost() + "/" + next_player)
         mess = self.createGameElt(to_jid)
-        yourturn_elt = mess.firstChildElement().addElement('your_turn')
-        self.host.profiles[profile].xmlstream.send(mess)
+        mess.firstChildElement().addElement('your_turn')
+        client.send(mess)
 
     def playerAnswer(self, player, referee, answer, profile_key=C.PROF_KEY_NONE):
         """Called when a player give an answer"""
-        profile = self.host.memory.getProfileName(profile_key)
-        if not profile:
-            log.error(_(u"profile %s is unknown") % profile_key)
-            return
-        log.debug(u'new player answer (%(profile)s): %(answer)s' % {'profile': profile, 'answer': answer})
+        client = self.host.getClient(profile_key)
+        log.debug(u'new player answer (%(profile)s): %(answer)s' % {'profile': client.profile, 'answer': answer})
         mess = self.createGameElt(jid.JID(referee))
         answer_elt = mess.firstChildElement().addElement('player_answer')
         answer_elt['player'] = player
         answer_elt.addContent(answer)
-        self.host.profiles[profile].xmlstream.send(mess)
+        client.send(mess)
 
     def timerExpired(self, room_jid, profile):
         """Called when nobody answered the question in time"""
+        client = self.host.getClient(profile)
         game_data = self.games[room_jid]
         game_data['stage'] = 'expired'
         mess = self.createGameElt(room_jid)
-        expired_elt = mess.firstChildElement().addElement('timer_expired')
-        self.host.profiles[profile].xmlstream.send(mess)
-        reactor.callLater(4, self.askQuestion, room_jid, profile)
+        mess.firstChildElement().addElement('timer_expired')
+        client.send(mess)
+        reactor.callLater(4, self.askQuestion, room_jid, client.profile)
 
     def pauseTimer(self, room_jid):
         """Stop the timer and save the time left"""
@@ -210,12 +204,13 @@
 
     def restartTimer(self, room_jid, profile):
         """Restart a timer with the saved time"""
+        client = self.host.getClient(profile)
         game_data = self.games[room_jid]
         assert game_data['time_left'] is not None
         mess = self.createGameElt(room_jid)
-        restarted_elt = mess.firstChildElement().addElement('timer_restarted')
-        restarted_elt["time_left"] = str(game_data['time_left'])
-        self.host.profiles[profile].xmlstream.send(mess)
+        mess.firstChildElement().addElement('timer_restarted')
+        jabber_client.restarted_elt["time_left"] = str(game_data['time_left'])
+        client.send(mess)
         game_data["timer"] = reactor.callLater(game_data['time_left'], self.timerExpired, room_jid, profile)
         game_data["time_left"] = None
         game_data['stage'] = game_data['previous_stage']
@@ -223,18 +218,20 @@
 
     def askQuestion(self, room_jid, profile):
         """Ask a new question"""
+        client = self.host.getClient(profile)
         game_data = self.games[room_jid]
         game_data['stage'] = "question"
         game_data['question_id'] = "1"
         timer = 30
         mess = self.createGameElt(room_jid)
         mess.firstChildElement().addChild(self.__ask_question(game_data['question_id'], u"Quel est l'âge du capitaine ?", timer))
-        self.host.profiles[profile].xmlstream.send(mess)
+        client.send(mess)
         game_data["timer"] = reactor.callLater(timer, self.timerExpired, room_jid, profile)
         game_data["time_left"] = None
 
     def checkAnswer(self, room_jid, player, answer, profile):
         """Check if the answer given is right"""
+        client = self.host.getClient(profile)
         game_data = self.games[room_jid]
         players_data = game_data['players_data']
         good_answer = game_data['question_id'] == "1" and answer == "42"
@@ -243,7 +240,7 @@
 
         mess = self.createGameElt(room_jid)
         mess.firstChildElement().addChild(self.__answer_result(player, good_answer, game_data))
-        self.host.profiles[profile].xmlstream.send(mess)
+        client.send(mess)
 
         if good_answer:
             reactor.callLater(4, self.askQuestion, room_jid, profile)
@@ -261,12 +258,13 @@
         reactor.callLater(10, self.askQuestion, room_jid, profile)
 
     def room_game_cmd(self, mess_elt, profile):
+        client = self.host.getClient(profile)
         from_jid = jid.JID(mess_elt['from'])
         room_jid = jid.JID(from_jid.userhost())
         game_elt = mess_elt.firstChildElement()
         game_data = self.games[room_jid]
-        if 'players_data' in game_data:
-            players_data = game_data['players_data']
+        # if 'players_data' in game_data:
+        #     players_data = game_data['players_data']
 
         for elt in game_elt.elements():
 
@@ -299,7 +297,7 @@
                 buzzer_elt = mess.firstChildElement().addElement('player_buzzed')
                 buzzer_elt['player'] = player
                 buzzer_elt['pause'] = str(pause)
-                self.host.profiles[profile].xmlstream.send(mess)
+                client.send(mess)
                 if pause:
                     self.pauseTimer(room_jid)
                     # and we send the player answer
@@ -309,7 +307,7 @@
                     say_elt['player'] = player
                     say_elt.addContent(_answer)
                     say_elt['delay'] = "3"
-                    reactor.callLater(2, self.host.profiles[profile].xmlstream.send, mess)
+                    reactor.callLater(2, client.send, mess)
                     reactor.callLater(6, self.checkAnswer, room_jid, player, _answer, profile=profile)
 
             elif elt.name == 'player_buzzed':