File size: 1,458 Bytes
9cb9bf5 059bbb9 9cb9bf5 4998714 059bbb9 9cb9bf5 33f8f7c 9cb9bf5 0491fc6 9cb9bf5 6048a58 9cb9bf5 07d1566 9cb9bf5 059bbb9 9cb9bf5 |
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 30 31 32 33 34 35 36 37 38 39 40 |
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.responses import HTMLResponse
import uuid
app = FastAPI()
transfers = {}
class ConnectionManager:
def __init__(self):
self.active_connections = {}
async def connect(self, transfer_id: str, websocket: WebSocket):
await websocket.accept()
if transfer_id not in self.active_connections:
self.active_connections[transfer_id] = []
self.active_connections[transfer_id].append(websocket)
def disconnect(self, transfer_id: str, websocket: WebSocket):
self.active_connections[transfer_id].remove(websocket)
manager = ConnectionManager()
@app.post("/create_transfer")
async def create_transfer():
transfer_id = str(uuid.uuid4())
transfers[transfer_id] = {"status": "waiting"}
return {"transfer_id": transfer_id}
@app.websocket("/ws/{transfer_id}")
async def websocket_endpoint(websocket: WebSocket, transfer_id: str):
await manager.connect(transfer_id, websocket)
try:
while True:
data = await websocket.receive_bytes()
# Пересылаем данные всем подключенным получателям
for connection in manager.active_connections.get(transfer_id, []):
if connection != websocket:
await connection.send_bytes(data)
except WebSocketDisconnect:
manager.disconnect(transfer_id, websocket) |