Remove users who have left matchmaking

This commit is contained in:
0880
2026-01-21 11:43:09 +03:30
parent 890faab9fc
commit 1bc950d97b

12
app.py
View File

@@ -243,12 +243,13 @@ async def new_room(request):
quick_queue: deque[str] quick_queue: deque[str]
quick_map: dict[str, Room] quick_map: dict[str, Room]
quick_last_map: dict[str, datetime]
lock = asyncio.Lock() lock = asyncio.Lock()
@app.POST("/quick") @app.POST("/quick")
async def quick_match(request: Request): async def quick_match(request: Request):
global quick_queue, quick_map global quick_queue, quick_map, quick_last_map
data = parse(request.body) data = parse(request.body)
async with lock: async with lock:
if ( if (
@@ -261,6 +262,13 @@ async def quick_match(request: Request):
second = None second = None
position: int = 0 position: int = 0
# UPDATE LOGIC # UPDATE LOGIC
now = datetime.now(timezone.utc)
for q, t in quick_last_map.items():
if t - now >= timedelta(seconds=3):
quick_queue.remove(q)
del quick_map[q]
del quick_last_map[q]
while position < len(quick_queue): while position < len(quick_queue):
if quick_queue[position] not in quick_map: if quick_queue[position] not in quick_map:
if not first: if not first:
@@ -277,6 +285,7 @@ async def quick_match(request: Request):
quick_map[second] = room quick_map[second] = room
qid = data["queue_id"] qid = data["queue_id"]
quick_last_map[qid] = datetime.now(timezone.utc)
if qid in quick_map: if qid in quick_map:
return JSONResponse({"room_id": quick_map[qid]}) return JSONResponse({"room_id": quick_map[qid]})
else: else:
@@ -285,6 +294,7 @@ async def quick_match(request: Request):
else: else:
qid = str(uuid.uuid4()) qid = str(uuid.uuid4())
quick_queue.append(qid) quick_queue.append(qid)
quick_last_map[qid] = datetime.now(timezone.utc)
return JSONResponse({"queue_id": qid}) return JSONResponse({"queue_id": qid})