Gestion refresh session_id au serveur

This commit is contained in:
2026-03-24 12:36:50 +01:00
parent 6eccea5b9d
commit e50b24dfec
3 changed files with 76 additions and 16 deletions

View File

@@ -38,6 +38,7 @@ class ApiEndPoints(Enum):
QUEUE_STATUS = '/queue/status/'
QUEUE_LEAVE = '/queue/leave'
QUEUE_JOIN = '/queue/join'
QUEUE_REFRESH = '/queue/refresh'
REGISTER_USER = '/api_v2/connection/register'
class Glow(Enum):

View File

@@ -1,15 +1,17 @@
# queue_manager.py — Aucune dépendance Qt
import requests
import time
from typing import Callable
from config.constants import Urls, ApiEndPoints
from config.constants import PlayerServerInfo # ← à ajouter si pas déjà importé
class QueueManager:
def __init__(self, user_id: str, on_update: Callable[[str], None]):
self.user_id = user_id
self.on_update = on_update # Callback pour envoyer les mises à jour
self.on_update = on_update
self._running = True
self._last_refresh = 0 # ← timestamp du dernier refresh
self.REFRESH_INTERVAL = 30 # ← en secondes
def stop(self):
self._running = False
@@ -23,7 +25,9 @@ class QueueManager:
return res.json()
def check_status(self) -> dict:
res = requests.get(f"{Urls.API_URL.value}{ApiEndPoints.QUEUE_STATUS.value}/{self.user_id}")
res = requests.get(
f"{Urls.API_URL.value}{ApiEndPoints.QUEUE_STATUS.value}/{self.user_id}"
)
return res.json()
def leave_queue(self):
@@ -33,24 +37,50 @@ class QueueManager:
verify=False
)
def refresh_session(self):
"""Informe le serveur que le client est toujours présent, sans changer le session_id."""
session_id = PlayerServerInfo.session_id
if not session_id:
return
try:
requests.post(
f"{Urls.API_URL.value}{ApiEndPoints.QUEUE_REFRESH.value}",
json={
"uuid": self.user_id,
"session_id": session_id,
},
verify=False,
timeout=5,
)
except requests.RequestException:
pass # On ignore silencieusement, le serveur expirera de lui-même
def start(self):
join = self.join_queue()
# print(f"[QueueManager] join response: {join}") # ← Debug
if join.get("position") == 0: # Position 0 = slot libre
if join.get("position") == 0:
self.on_update("ok")
return
self.on_update(f"position:{join.get('position')}:{join.get('queueSize')}")
self._last_refresh = time.monotonic() # ← démarre le compteur après le join
while self._running:
time.sleep(5)
if not self._running:
break
# Refresh du session_id toutes les 30 secondes
now = time.monotonic()
if now - self._last_refresh >= self.REFRESH_INTERVAL:
self.refresh_session()
self._last_refresh = now
# Vérification de la position en file
status = self.check_status()
if status.get("position") == 0: # Position 0 = c'est le tour
if status.get("position") == 0:
self.on_update("ready")
return
else:

View File

@@ -36,6 +36,7 @@ class MainWindow(QMainWindow):
self.config = config_manager
self.stored_user_id = self.config.get_discord_user()
self.queue_thread = None
self.queue_position_value = None
# UI
self.ui = QUiLoader().load(f"{bundle_dir}/ui/mainwindow_vertical_pager.ui", self)
@@ -149,9 +150,39 @@ class MainWindow(QMainWindow):
def _on_connexion(self) -> None:
try:
session_id = GetServerTokenForDiscord.authenticate(Urls.API_URL.value)
GetServerTokenForDiscord.register_discord_user(self.stored_user_id, session_id)
if not self.stored_user_id or self.stored_user_id.isspace():
show_qt_error(
self,
"Connexion impossible",
"Aucun identifiant Discord n'est disponible. Merci de passer par la connexion Discord."
)
return
if not PlayerServerInfo.session_id:
PlayerServerInfo.session_id = GetServerTokenForDiscord.authenticate(Urls.API_URL.value)
GetServerTokenForDiscord.register_discord_user(
self.stored_user_id,
PlayerServerInfo.session_id,
)
if self.queue_position_value is None:
show_qt_error(
self,
"Connexion en attente",
"La position dans la file d'attente n'est pas encore connue."
)
return
if self.queue_position_value != 0:
show_qt_error(
self,
"Connexion en attente",
f"Tu dois attendre ton tour.\n\nPosition actuelle : {self.queue_position_value}"
)
return
FiveMLauncher.launch()
except ApiError as exc:
show_qt_error(self, "Connexion impossible", f"Erreur lors de la connexion.\n\n{exc}")
@@ -218,28 +249,26 @@ class MainWindow(QMainWindow):
self.queue_thread.start()
# 🧪 TEMP - Simule une position en queue pour tester l'UI
self.handle_update("position:3:10")
# self.handle_update("position:3:10")
def handle_update(self, message: str):
# print(f"[handle_update] reçu: {message}") # ← Debug
if message == "ok":
self.ui.queue_lbl.setVisible(False)
self.ui.queue_lbl.setVisible(True)
self.ui.queue_position.setVisible(False)
#self.ui.connexion_btn.setEnabled(True)
#self.ui.connexion_btn.setText("Lancer FiveM")
#self.launch_fivem()
self.ui.queue_lbl.setText("🚀 C'est votre tour !")
self.queue_position_value = 0
elif message == "ready":
self.ui.queue_lbl.setVisible(True)
self.ui.queue_position.setVisible(False)
self.ui.queue_lbl.setText("🚀 C'est votre tour !")
self.launch_fivem()
self.queue_position_value = 0
elif message.startswith("position:"):
_, pos, total = message.split(":")
self.queue_position_value = int(pos)
self.ui.queue_lbl.setVisible(True)
self.ui.queue_position.setVisible(True)
#self.ui.queue_position.setText(f"{pos} / {total}") <- si on veux le total de slots
self.ui.queue_position.setText(f"{pos}")
def launch_fivem(self):