File size: 970 Bytes
484723b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96dd24d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 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()

@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}")