fixed a bug where creating a room and quiting it would not close the thread
This commit is contained in:
parent
5dcd570be8
commit
f38f440e9d
4 changed files with 29 additions and 12 deletions
3
NOTE.md
3
NOTE.md
|
@ -6,5 +6,4 @@ A faire :
|
|||
- Combiner le _event_wrapper de Window et Scene (?)
|
||||
|
||||
Bug :
|
||||
- Appuyez sur "Créer une salle" va lancer un thread, mais il n'est pas fermé s'il l'on revient dans
|
||||
le menu principal
|
||||
- /
|
|
@ -6,7 +6,6 @@ import requests
|
|||
from source import network
|
||||
from source.gui.scene.abc import Scene
|
||||
from source.gui import widget, texture
|
||||
from source.utils.dict import dict_add_prefix
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from source.gui.window import Window
|
||||
|
@ -36,8 +35,7 @@ class RoomCreate(Scene):
|
|||
label_batch=self.batch_label
|
||||
)
|
||||
|
||||
from source.gui.scene import MainMenu
|
||||
self.back.add_listener("on_click_release", lambda *_: self.window.set_scene(MainMenu))
|
||||
self.back.add_listener("on_click_release", self.button_back_callback)
|
||||
|
||||
self.label_ip = self.add_widget(
|
||||
widget.Text,
|
||||
|
@ -65,6 +63,11 @@ class RoomCreate(Scene):
|
|||
self.thread = network.Host(window=self.window, daemon=True, username="Host")
|
||||
self.thread.start()
|
||||
|
||||
def button_back_callback(self, *_):
|
||||
self.thread.stop()
|
||||
from source.gui.scene import MainMenu
|
||||
self.window.set_scene(MainMenu)
|
||||
|
||||
def on_draw(self):
|
||||
self.batch_button_background.draw()
|
||||
self.batch_label.draw()
|
||||
|
|
|
@ -30,8 +30,7 @@ class RoomJoin(Scene):
|
|||
label_batch=self.batch_label
|
||||
)
|
||||
|
||||
from source.gui.scene import MainMenu
|
||||
self.back.add_listener("on_click_release", lambda *_: self.window.set_scene(MainMenu))
|
||||
self.back.add_listener("on_click_release", self.button_back_callback)
|
||||
|
||||
self.entry_ip = self.add_widget(
|
||||
widget.Input,
|
||||
|
@ -76,6 +75,10 @@ class RoomJoin(Scene):
|
|||
username="Client"
|
||||
).start())
|
||||
|
||||
def button_back_callback(self, *_):
|
||||
from source.gui.scene import MainMenu
|
||||
self.window.set_scene(MainMenu)
|
||||
|
||||
def on_draw(self):
|
||||
self.batch_button_background.draw()
|
||||
self.batch_input_background.draw()
|
||||
|
|
|
@ -15,20 +15,32 @@ class Host(Thread):
|
|||
def __init__(self, window: "Window", username: str, port: int = 52321, **kw):
|
||||
super().__init__(**kw)
|
||||
|
||||
self._stop = False
|
||||
|
||||
self.window = window
|
||||
self.username = username
|
||||
self.port = port
|
||||
|
||||
def stop(self) -> None:
|
||||
self._stop = True
|
||||
|
||||
def run(self) -> None:
|
||||
print("[Serveur] Thread démarré")
|
||||
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
||||
s.bind(("", self.port))
|
||||
s.listen()
|
||||
connection, address = s.accept()
|
||||
s.bind(("", self.port)) # connecte le socket au port indiqué
|
||||
|
||||
s.settimeout(5) # defini le timeout à 5 secondes
|
||||
s.listen() # écoute de nouvelle connexion
|
||||
|
||||
while True:
|
||||
try:
|
||||
connection, address = s.accept() # accepte la première connexion entrante
|
||||
break # sort de la boucle
|
||||
except socket.timeout: # en cas de timeout
|
||||
if self._stop: return # vérifie si le thread n'est pas censé s'arrêter
|
||||
# sinon, réessaye
|
||||
|
||||
print(f"[Serveur] Connecté avec {address}")
|
||||
|
||||
pyglet.clock.schedule_once(lambda dt: self.window.set_scene(scene.Game), 0)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue