diff --git a/NOTE.md b/NOTE.md index 4f0cebb..b414527 100644 --- a/NOTE.md +++ b/NOTE.md @@ -10,10 +10,8 @@ A faire : - Voir les TODOs 3. Bug : - - Quitter pendant que l'on décide de si l'on doit charger ou non une ancienne sauvegarde fait crash l'adversaire - Si le port est déjà utilisé, le jeu n'indique par l'erreur à l'hôte - Les champs invalides n'empêchent pas de faire l'action - - (incertain) Dans de rare cas (souvent en fermant brutalement la fenêtre) le processus ne s'arrête pas - Si la fenêtre est fermée, l'erreur "delete_vao AttributeError: 'NoneType' object has no attribute 'current_context'" apparait parfois 4. Vérification : diff --git a/source/network/Client.py b/source/network/Client.py index 9946011..68215e9 100644 --- a/source/network/Client.py +++ b/source/network/Client.py @@ -87,6 +87,14 @@ class Client(StoppableThread): break except socket.timeout: if self.stopped: return + except ConnectionResetError: + from source.gui.scene import GameError + in_pyglet_context( + self.window.set_scene, + GameError, + text="Perte de connexion avec l'adversaire" + ) + return if load_old_save: diff --git a/source/network/Host.py b/source/network/Host.py index 573b2c8..c99117e 100644 --- a/source/network/Host.py +++ b/source/network/Host.py @@ -38,7 +38,7 @@ class Host(StoppableThread): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server: server.bind(("", self.port)) # connecte le socket au port indiqué - server.settimeout(1) # défini le timeout à 1 secondes + server.settimeout(1) # défini le timeout à 1 seconde server.listen() # écoute de nouvelle connexion while True: @@ -75,7 +75,16 @@ class Host(StoppableThread): with self.condition_load: self.condition_load.wait() # attend que l'utilisateur choisisse l'option - PacketLoadOldSave(value=self.accept_load).send_data_connection(connection) + try: + PacketLoadOldSave(value=self.accept_load).send_data_connection(connection) + except ConnectionResetError: + from source.gui.scene import GameError + in_pyglet_context( + self.window.set_scene, + GameError, + text="Perte de connexion avec l'adversaire" + ) + return if self.accept_load: @@ -121,3 +130,6 @@ class Host(StoppableThread): connection=connection, game_scene=game_scene ) + + # TODO: englober les threads de try sur ConnectionResetError pour ramener au menu d'erreur directement + # au lieu de le faire manuellement à chaque fois