add voice_rooms
This commit is contained in:
28
app/api/voice_rooms.py
Normal file
28
app/api/voice_rooms.py
Normal file
@ -0,0 +1,28 @@
|
||||
from fastapi import APIRouter, Body
|
||||
from app.services.voice_rooms import VoiceRoomService
|
||||
from app.realtime.voice_hub import voice_hub
|
||||
|
||||
router = APIRouter(prefix="/api/voice")
|
||||
service = VoiceRoomService()
|
||||
|
||||
|
||||
@router.get("/rooms")
|
||||
async def list_rooms():
|
||||
rooms = await service.list_public_rooms()
|
||||
for r in rooms:
|
||||
r["users"] = len(voice_hub.rooms.get(r["id"], {}))
|
||||
return rooms
|
||||
|
||||
|
||||
@router.post("/rooms")
|
||||
async def create_room(
|
||||
name: str = Body(...),
|
||||
public: bool = Body(True),
|
||||
owner: str = Body(...),
|
||||
):
|
||||
return await service.create_room(name, owner, public)
|
||||
|
||||
|
||||
@router.post("/rooms/join")
|
||||
async def join_private(code: str = Body(...)):
|
||||
return await service.join_by_code(code)
|
||||
@ -1,5 +1,6 @@
|
||||
from fastapi import APIRouter, WebSocket, WebSocketDisconnect, Query
|
||||
from app.realtime.voice_hub import voice_hub
|
||||
from app.services.voice_rooms import voice_rooms_collection
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@ -9,9 +10,17 @@ async def voice_ws(
|
||||
room_id: str = Query(...),
|
||||
username: str = Query(...)
|
||||
):
|
||||
room = await voice_rooms_collection.find_one({"id": room_id})
|
||||
if not room:
|
||||
await ws.close(code=4004)
|
||||
return
|
||||
if username in voice_hub.rooms.get(room_id, {}):
|
||||
await ws.close(code=4001)
|
||||
return
|
||||
|
||||
if len(voice_hub.rooms.get(room_id, {})) >= room.get("max_users", 5):
|
||||
await ws.close(code=4003)
|
||||
return
|
||||
|
||||
await voice_hub.connect(room_id, username, ws)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user