import json import asyncio from quart import Quart, websocket peer_list = {} app = Quart(__name__) @app.route("/") async def retmain(): return f"Ready to relay\n" @app.websocket("/ws") async def handle_websockets(): peer_group_id = None while True: try: message = await websocket.receive() msg = json.loads(message) if "peer_group_id" in msg: peer_group_id = msg["peer_group_id"] if peer_group_id not in peer_list: peer_list[peer_group_id] = set() peer_list[peer_group_id].add(websocket._get_current_object()) for peer in peer_list[peer_group_id]: if peer != websocket._get_current_object(): await peer.send(message) except asyncio.exceptions.CancelledError: peer_list[peer_group_id].remove(websocket._get_current_object()) if len(peer_list[peer_group_id]) < 1: peer_list.pop(peer_group_id) app.run()