Spaces:
Paused
Paused
| 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 = {} | |
| async def index(request: Request): | |
| return templates.TemplateResponse("index.html", {"request": request}) | |
| 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] | |