fixed an issue where leaving while the other was deciding to load the old save would softlock the user
This commit is contained in:
parent
708e32e245
commit
8ef6d0d239
3 changed files with 22 additions and 4 deletions
2
NOTE.md
2
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 :
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue