share / main.py
Starchik1's picture
Update main.py
9cb9bf5 verified
raw
history blame
1.46 kB
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)