WIP: whitelist, queue
This commit is contained in:
128
src/fivemserver/queuemanager.py
Normal file
128
src/fivemserver/queuemanager.py
Normal file
@@ -0,0 +1,128 @@
|
||||
import requests
|
||||
from PySide6.QtCore import QThread, Signal
|
||||
|
||||
from config.constants import Urls, ApiEndPoints
|
||||
|
||||
|
||||
class JoinQueueThread(QThread):
|
||||
result = Signal(dict)
|
||||
error = Signal(str)
|
||||
|
||||
def __init__(self, user_id: str):
|
||||
super().__init__()
|
||||
self.user_id = user_id
|
||||
self.api_url = Urls.API_URL.value
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
res = requests.post(
|
||||
f"{self.api_url}{ApiEndPoints.QUEUE_JOIN.value}",
|
||||
headers={"Content-Type": "application/json"},
|
||||
json={"uuid": self.user_id}
|
||||
)
|
||||
self.result.emit(res.json())
|
||||
except Exception as e:
|
||||
self.error.emit(str(e))
|
||||
|
||||
|
||||
class CheckStatusThread(QThread):
|
||||
result = Signal(dict)
|
||||
error = Signal(str)
|
||||
|
||||
def __init__(self, user_id: str):
|
||||
super().__init__()
|
||||
self.user_id = user_id
|
||||
self.api_url = Urls.API_URL.value
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
res = requests.get(f"{self.api_url}{ApiEndPoints.QUEUE_STATUS.value}{self.user_id}")
|
||||
self.result.emit(res.json())
|
||||
except Exception as e:
|
||||
self.error.emit(str(e))
|
||||
|
||||
|
||||
class LeaveQueueThread(QThread):
|
||||
done = Signal()
|
||||
error = Signal(str)
|
||||
|
||||
def __init__(self, user_id: str):
|
||||
super().__init__()
|
||||
self.user_id = user_id
|
||||
self.api_url = Urls.API_URL.value
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
requests.post(
|
||||
f"{self.api_url}{ApiEndPoints.QUEUE_LEAVE.value}",
|
||||
headers={"Content-Type": "application/json"},
|
||||
json={"uuid": self.user_id}
|
||||
)
|
||||
self.done.emit()
|
||||
except Exception as e:
|
||||
self.error.emit(str(e))
|
||||
|
||||
|
||||
class QueueManager(QThread):
|
||||
"""
|
||||
Équivalent de startQueue() — gère tout le cycle :
|
||||
join → poll toutes les 5s → lance FiveM quand c'est le tour
|
||||
"""
|
||||
update_ui = Signal(str) # → updateQueueUI()
|
||||
launch_game = Signal() # → launchFiveM()
|
||||
error = Signal(str)
|
||||
|
||||
def __init__(self, user_id: str, parent=None):
|
||||
super().__init__(parent)
|
||||
self.user_id = user_id
|
||||
self.api_url = Urls.API_URL.value
|
||||
self._running = True
|
||||
|
||||
def stop(self):
|
||||
self._running = False
|
||||
|
||||
def run(self):
|
||||
# 1. Join queue
|
||||
try:
|
||||
res = requests.post(
|
||||
f"{self.api_url}/queue/join",
|
||||
headers={"Content-Type": "application/json"},
|
||||
json={"uuid": self.user_id}
|
||||
)
|
||||
join = res.json()
|
||||
except Exception as e:
|
||||
self.error.emit(str(e))
|
||||
return
|
||||
|
||||
# 2. Slot dispo directement
|
||||
if join.get("status") == "ok":
|
||||
self.update_ui.emit("Slot dispo, lancement du jeu...")
|
||||
self.launch_game.emit()
|
||||
return
|
||||
|
||||
# 3. En file d'attente → poll toutes les 5s
|
||||
self.update_ui.emit(
|
||||
f"⏳ Vous êtes en file d'attente : position {join.get('position')} / {join.get('queueSize')}"
|
||||
)
|
||||
|
||||
while self._running:
|
||||
self.sleep(5) # Équivalent setInterval 5000ms
|
||||
|
||||
if not self._running:
|
||||
break
|
||||
|
||||
try:
|
||||
res = requests.get(f"{self.api_url}/queue/status/{self.user_id}")
|
||||
status = res.json()
|
||||
except Exception as e:
|
||||
self.error.emit(str(e))
|
||||
return
|
||||
|
||||
if status.get("status") == "queued":
|
||||
self.update_ui.emit(
|
||||
f"⏳ Votre position : {status.get('position')} / {status.get('queueSize')}"
|
||||
)
|
||||
else:
|
||||
self.update_ui.emit("🚀 C'est votre tour !")
|
||||
self.launch_game.emit()
|
||||
return
|
||||
Reference in New Issue
Block a user