Remove users who have left matchmaking
This commit is contained in:
12
app.py
12
app.py
@@ -243,12 +243,13 @@ async def new_room(request):
|
||||
|
||||
quick_queue: deque[str]
|
||||
quick_map: dict[str, Room]
|
||||
quick_last_map: dict[str, datetime]
|
||||
lock = asyncio.Lock()
|
||||
|
||||
|
||||
@app.POST("/quick")
|
||||
async def quick_match(request: Request):
|
||||
global quick_queue, quick_map
|
||||
global quick_queue, quick_map, quick_last_map
|
||||
data = parse(request.body)
|
||||
async with lock:
|
||||
if (
|
||||
@@ -261,6 +262,13 @@ async def quick_match(request: Request):
|
||||
second = None
|
||||
position: int = 0
|
||||
# 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):
|
||||
if quick_queue[position] not in quick_map:
|
||||
if not first:
|
||||
@@ -277,6 +285,7 @@ async def quick_match(request: Request):
|
||||
quick_map[second] = room
|
||||
|
||||
qid = data["queue_id"]
|
||||
quick_last_map[qid] = datetime.now(timezone.utc)
|
||||
if qid in quick_map:
|
||||
return JSONResponse({"room_id": quick_map[qid]})
|
||||
else:
|
||||
@@ -285,6 +294,7 @@ async def quick_match(request: Request):
|
||||
else:
|
||||
qid = str(uuid.uuid4())
|
||||
quick_queue.append(qid)
|
||||
quick_last_map[qid] = datetime.now(timezone.utc)
|
||||
return JSONResponse({"queue_id": qid})
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user