Quick matchmaking API

This commit is contained in:
0880
2026-01-20 19:57:38 +03:30
parent 17d66398b4
commit c367ebad1f

50
app.py
View File

@@ -4,6 +4,7 @@ import random
import re
import string
import uuid
from collections import deque
from collections.abc import Iterator
from datetime import datetime, timedelta, timezone
from enum import Enum
@@ -240,6 +241,55 @@ async def new_room(request):
},
)
quick_queue: deque[str]
quick_map: dict[str, Room]
lock = asyncio.Lock()
@app.POST("/quick")
async def quick_match(request: Request):
global quick_queue, quick_map
data = parse(request.body)
async with lock:
if (
data
and len(data) == 1
and "queue_id" in data
and data["queue_id"] in quick_queue
):
first = None
second = None
position: int = 0
# UPDATE LOGIC
while not second and position < len(quick_queue):
if quick_queue[position] not in quick_map:
if not first:
first = quick_queue[position]
else:
second = quick_queue[position]
position += 1
if first and second:
room = Room()
k = room_key()
rooms[k] = room
quick_map[first] = room
quick_map[second] = room
qid = data["queue_id"]
if qid in quick_map:
return JSONResponse(request, {"room_id": quick_map[qid]})
else:
return JSONResponse(
request, {}
) # Client handles empty as continue to wait
else:
qid = str(uuid.uuid4())
quick_queue.append(qid)
return JSONResponse(request, {"queue_id": qid})
@app.GET("/")
async def home(request):
return render(request, "home.html")