| # server.py (using FastAPI and FastRTC) | |
| import asyncio | |
| import json | |
| import uuid | |
| from fastapi import FastAPI, WebSocket, WebSocketDisconnect | |
| from fastrtc import RTCRoom, RTCRoomManager | |
| app = FastAPI() | |
| room_manager = RTCRoomManager() | |
| 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}") |