Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, WebSocket, WebSocketDisconnect | |
from websockets import connect as websockets_connect | |
from typing import Dict | |
app = FastAPI() | |
clients: Dict[str, WebSocket] = {} | |
def get_clients(): | |
return list(clients.keys()) | |
async def sendmsg(name,id,message): | |
async with websockets_connect("ws://localhost:7860"+name) as websocket: | |
await websocket.send(f"{id}:{message}") | |
return await websocket.recv() | |
async def websocket_endpoint(websocket: WebSocket, client_id: str): | |
await websocket.accept() | |
clients[client_id] = websocket | |
print(f"Client {client_id} connected.") | |
try: | |
while True: | |
data = await websocket.receive_text() | |
message_parts = data.split(":", 1) | |
if len(message_parts) == 2: | |
target_client_id = message_parts[0].strip() | |
msg_content = message_parts[1].strip() | |
if target_client_id in clients: | |
target_websocket = clients[target_client_id] | |
await target_websocket.send_text(f"{client_id}: {msg_content}") | |
else: | |
await websocket.send_text(f"Error: Client {target_client_id} not found.") | |
else: | |
await websocket.send_text("Error: Invalid message format. Use 'target_id:message'.") | |
except WebSocketDisconnect: | |
del clients[client_id] | |
print(f"Client disconnected: {client_id}") | |
if __name__ == "__main__": | |
import uvicorn | |
uvicorn.run(app, host="0.0.0.0", port=7860) |