Bandito / app.py
makinuh's picture
Create app.py
fe9baf2 verified
# app.py
from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastrtc import RTCRoom, RTCRoomManager
from fastapi.templating import Jinja2Templates
import uuid
import json
app = FastAPI()
room_manager = RTCRoomManager()
app.mount("/static", StaticFiles(directory="static"), name="static") # Mount static files
templates = Jinja2Templates(directory="templates") # Mount templates
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
@app.websocket("/ws/{room_id}/{client_id}")
async def websocket_endpoint(websocket: WebSocket, room_id: str, client_id: str):
await websocket.accept()
room = room_manager.get_or_create_room(room_id)
peer = await room.join(client_id, websocket)
try:
while True:
message = await websocket.receive_text()
data = json.loads(message)
if data["type"] == "offer" or data["type"] == "answer" or data["type"] == "candidate":
await peer.handle_sdp(data)
else:
print(f"Received unknown message: {data}")
except WebSocketDisconnect:
await room.leave(client_id)
print(f"Client {client_id} disconnected from room {room_id}")