/[ambar]/ambar/interfazpj.py
ViewVC logotype

Diff of /ambar/interfazpj.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2.3 by amoyav, Thu Aug 29 12:18:21 2002 UTC revision 2.4 by amoyav, Sun Oct 27 10:16:28 2002 UTC
# Line 41  class InterfazPJ(Controlador): Line 41  class InterfazPJ(Controlador):
41      Una vez inicializada, crea un dialogo con el jugador y le pasa el control.      Una vez inicializada, crea un dialogo con el jugador y le pasa el control.
42      Todos los eventos recibidos se los pasa al dialogo actual, y éste responde a      Todos los eventos recibidos se los pasa al dialogo actual, y éste responde a
43      los mismos. La respuesta puede incluir cambiar a otro dialogo distinto.      los mismos. La respuesta puede incluir cambiar a otro dialogo distinto.
44    
45        También se encarga de recibir los ticks del reloj global de Mundo, y pasárselos
46        al diálogo si éste los acepta.
47            
48      Contiene los siguientes atributos:      Contiene los siguientes atributos:
49            
# Line 66  class InterfazPJ(Controlador): Line 69  class InterfazPJ(Controlador):
69          self.__personaje = None          self.__personaje = None
70          self.__dialogo = DialogoInicial(self, self.__conn)          self.__dialogo = DialogoInicial(self, self.__conn)
71    
72            Mundo_suscribirse_al_tick(self.tick_recibido)
73    
74    
75      def __del__(self):      def __del__(self):
76          """Realiza ajustes automáticos al ser destruido."""          """Realiza ajustes automáticos al ser destruido."""
77          self.desconectar()          self.desconectar()
78            Mundo_borrarse_del_tick(self.tick_recibido)
79    
80            
81      def conn(self):      def conn(self):
# Line 181  class InterfazPJ(Controlador): Line 187  class InterfazPJ(Controlador):
187            
188      def movimiento_automatico(self):      def movimiento_automatico(self):
189          self.__dialogo.movimiento_automatico()          self.__dialogo.movimiento_automatico()
190    
191    
192        # ------------------------------
193        # Tick del reloj global de Mundo
194        # ------------------------------
195                
196        def tick_recibido(self, tick_ahora, tick_anterior):
197            """Responde al tick llamando al diálogo si éste implementa la función."""
198    
199            try:
200    
201                # Luego llamamos a la funcion correspondiente segun estado
202                nombre_func = "tick_" + str(self.__dialogo.estado())
203                func = getattr(self.__dialogo, nombre_func, None)
204                if func != None:
205                    nuevo_dialogo = func(tick_ahora, tick_anterior)
206    
207                    # Si hay que cambiar de dialogo, hacerlo
208                    if nuevo_dialogo != None:
209                        self.__dialogo = nuevo_dialogo
210    
211            except:
212            
213                # No deben ocurrir excepciones no tratadas salvo por un bug del
214                # programa. Aquí se interceptan para que un bug afecte, si es posible,
215                # sólo a la conexión que lo ha hecho saltar, pero no se caiga el
216                # servidor entero.
217                #
218                # Si ocurre esto, desconectamos al jugador de su personaje, pero
219                # mantenemos la conexión abierta por si quiere volverlo a intentar.
220    
221                escribir("Excepción imprevista durante el tick del reloj global.")
222                escribir(" -> conexión desde " + self.__conn.ip)
223                escribir(" -> tick ahora " + str(tick_ahora))
224                escribir(" -> tick anterior " + str(tick_anterior))
225                escribir(" -> dialogo " + str(self.__dialogo.__class__))
226                if self.__personaje != None:
227                    escribir(" -> personaje " + self.__personaje.id)
228                escribir_excepcion()
229    
230                try:
231    
232                    self.__conn.send("\n\nHa ocurrido un error imprevisto en Mine, probablemente se trate")
233                    self.__conn.send("de un fallo en el programa. Por favor, ponte en contacto con los")
234                    self.__conn.send("administadores del juego y explicales, si es posible, toda la")
235                    self.__conn.send("información que tengas sobre lo que estabas haciendo en el momento")
236                    self.__conn.send("del error. Gracias, y disculpa por las molestias.")
237    
238                    self.terminar()
239    
240                except:
241                    
242                    # Si no se puede salir del personaje normalmente, tiramos la
243                    # conexión del todo.
244                    escribir("Problema gordo: no se puede mantener la conexión. La tiramos...")
245                    self.desconectar()
246    
247                    
248      # ------------------      # ------------------
249      # Eventos del socket      # Eventos del socket

Legend:
Removed from v.2.3  
changed lines
  Added in v.2.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26