fixed an issue where leaving while the other was deciding to load the old save would softlock the user

This commit is contained in:
Faraphel 2023-03-08 23:18:05 +01:00
parent 708e32e245
commit 8ef6d0d239
3 changed files with 22 additions and 4 deletions

View file

@ -10,10 +10,8 @@ A faire :
- Voir les TODOs - Voir les TODOs
3. Bug : 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 - 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 - 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 - Si la fenêtre est fermée, l'erreur "delete_vao AttributeError: 'NoneType' object has no attribute 'current_context'" apparait parfois
4. Vérification : 4. Vérification :

View file

@ -87,6 +87,14 @@ class Client(StoppableThread):
break break
except socket.timeout: except socket.timeout:
if self.stopped: return 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: if load_old_save:

View file

@ -38,7 +38,7 @@ class Host(StoppableThread):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
server.bind(("", self.port)) # connecte le socket au port indiqué 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 server.listen() # écoute de nouvelle connexion
while True: while True:
@ -75,7 +75,16 @@ class Host(StoppableThread):
with self.condition_load: self.condition_load.wait() # attend que l'utilisateur choisisse l'option with self.condition_load: self.condition_load.wait() # attend que l'utilisateur choisisse l'option
try:
PacketLoadOldSave(value=self.accept_load).send_data_connection(connection) 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: if self.accept_load:
@ -121,3 +130,6 @@ class Host(StoppableThread):
connection=connection, connection=connection,
game_scene=game_scene 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