peertopeer / main.py
triflix's picture
Update main.py
f0a8a5e verified
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from fastapi import Request
app = FastAPI()
templates = Jinja2Templates(directory="templates")
# Keep track of rooms and their connections
rooms = {}
@app.get("/")
async def index(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
@app.websocket("/ws/{room_id}")
async def websocket_endpoint(websocket: WebSocket, room_id: str):
await websocket.accept()
if room_id not in rooms:
rooms[room_id] = []
rooms[room_id].append(websocket)
try:
while True:
data = await websocket.receive_text()
# Broadcast to other clients in room
for conn in rooms[room_id]:
if conn != websocket:
await conn.send_text(data)
except WebSocketDisconnect:
rooms[room_id].remove(websocket)
if not rooms[room_id]:
del rooms[room_id]