Gestion refresh session_id au serveur
This commit is contained in:
@@ -38,6 +38,7 @@ class ApiEndPoints(Enum):
|
|||||||
QUEUE_STATUS = '/queue/status/'
|
QUEUE_STATUS = '/queue/status/'
|
||||||
QUEUE_LEAVE = '/queue/leave'
|
QUEUE_LEAVE = '/queue/leave'
|
||||||
QUEUE_JOIN = '/queue/join'
|
QUEUE_JOIN = '/queue/join'
|
||||||
|
QUEUE_REFRESH = '/queue/refresh'
|
||||||
REGISTER_USER = '/api_v2/connection/register'
|
REGISTER_USER = '/api_v2/connection/register'
|
||||||
|
|
||||||
class Glow(Enum):
|
class Glow(Enum):
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
# queue_manager.py — Aucune dépendance Qt
|
|
||||||
import requests
|
import requests
|
||||||
import time
|
import time
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from config.constants import Urls, ApiEndPoints
|
from config.constants import Urls, ApiEndPoints
|
||||||
|
from config.constants import PlayerServerInfo # ← à ajouter si pas déjà importé
|
||||||
|
|
||||||
class QueueManager:
|
class QueueManager:
|
||||||
def __init__(self, user_id: str, on_update: Callable[[str], None]):
|
def __init__(self, user_id: str, on_update: Callable[[str], None]):
|
||||||
self.user_id = user_id
|
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._running = True
|
||||||
|
self._last_refresh = 0 # ← timestamp du dernier refresh
|
||||||
|
self.REFRESH_INTERVAL = 30 # ← en secondes
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self._running = False
|
self._running = False
|
||||||
@@ -23,7 +25,9 @@ class QueueManager:
|
|||||||
return res.json()
|
return res.json()
|
||||||
|
|
||||||
def check_status(self) -> dict:
|
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()
|
return res.json()
|
||||||
|
|
||||||
def leave_queue(self):
|
def leave_queue(self):
|
||||||
@@ -33,24 +37,50 @@ class QueueManager:
|
|||||||
verify=False
|
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):
|
def start(self):
|
||||||
join = self.join_queue()
|
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")
|
self.on_update("ok")
|
||||||
return
|
return
|
||||||
|
|
||||||
self.on_update(f"position:{join.get('position')}:{join.get('queueSize')}")
|
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:
|
while self._running:
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
if not self._running:
|
if not self._running:
|
||||||
break
|
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()
|
status = self.check_status()
|
||||||
|
|
||||||
if status.get("position") == 0: # Position 0 = c'est le tour
|
if status.get("position") == 0:
|
||||||
self.on_update("ready")
|
self.on_update("ready")
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ class MainWindow(QMainWindow):
|
|||||||
self.config = config_manager
|
self.config = config_manager
|
||||||
self.stored_user_id = self.config.get_discord_user()
|
self.stored_user_id = self.config.get_discord_user()
|
||||||
self.queue_thread = None
|
self.queue_thread = None
|
||||||
|
self.queue_position_value = None
|
||||||
|
|
||||||
# UI
|
# UI
|
||||||
self.ui = QUiLoader().load(f"{bundle_dir}/ui/mainwindow_vertical_pager.ui", self)
|
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:
|
def _on_connexion(self) -> None:
|
||||||
try:
|
try:
|
||||||
session_id = GetServerTokenForDiscord.authenticate(Urls.API_URL.value)
|
if not self.stored_user_id or self.stored_user_id.isspace():
|
||||||
GetServerTokenForDiscord.register_discord_user(self.stored_user_id, session_id)
|
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()
|
FiveMLauncher.launch()
|
||||||
|
|
||||||
except ApiError as exc:
|
except ApiError as exc:
|
||||||
show_qt_error(self, "Connexion impossible", f"Erreur lors de la connexion.\n\n{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()
|
self.queue_thread.start()
|
||||||
|
|
||||||
# 🧪 TEMP - Simule une position en queue pour tester l'UI
|
# 🧪 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):
|
def handle_update(self, message: str):
|
||||||
# print(f"[handle_update] reçu: {message}") # ← Debug
|
|
||||||
if message == "ok":
|
if message == "ok":
|
||||||
self.ui.queue_lbl.setVisible(False)
|
self.ui.queue_lbl.setVisible(True)
|
||||||
self.ui.queue_position.setVisible(False)
|
self.ui.queue_position.setVisible(False)
|
||||||
#self.ui.connexion_btn.setEnabled(True)
|
self.ui.queue_lbl.setText("🚀 C'est votre tour !")
|
||||||
#self.ui.connexion_btn.setText("Lancer FiveM")
|
self.queue_position_value = 0
|
||||||
#self.launch_fivem()
|
|
||||||
|
|
||||||
elif message == "ready":
|
elif message == "ready":
|
||||||
self.ui.queue_lbl.setVisible(True)
|
self.ui.queue_lbl.setVisible(True)
|
||||||
self.ui.queue_position.setVisible(False)
|
self.ui.queue_position.setVisible(False)
|
||||||
self.ui.queue_lbl.setText("🚀 C'est votre tour !")
|
self.ui.queue_lbl.setText("🚀 C'est votre tour !")
|
||||||
self.launch_fivem()
|
self.queue_position_value = 0
|
||||||
|
|
||||||
elif message.startswith("position:"):
|
elif message.startswith("position:"):
|
||||||
_, pos, total = message.split(":")
|
_, pos, total = message.split(":")
|
||||||
|
self.queue_position_value = int(pos)
|
||||||
self.ui.queue_lbl.setVisible(True)
|
self.ui.queue_lbl.setVisible(True)
|
||||||
self.ui.queue_position.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}")
|
self.ui.queue_position.setText(f"{pos}")
|
||||||
|
|
||||||
def launch_fivem(self):
|
def launch_fivem(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user