import asyncio from websockets.asyncio.server import serve import websockets as ws import time class SpeakerClient: def __init__(self, connection, instance) -> None: self.connection = connection self.instance = instance self.alive = True async def check_open(self): try: await self.connection.send("") return True except ws.ConnectionClosed: return False CONNECTIONS = set() async def handler(websocket): async for message in websocket: args = message.split('/') if (args[0] == "speaker"): CONNECTIONS.add(SpeakerClient(websocket, int(args[1]))) print(f"New Speaker, instance {args[1]}") if (args[0] == "status"): print("Checking system health...") remove_conns = [] for c in CONNECTIONS: status = await c.check_open() if status: print(f"Instance {c.instance} is alive") await websocket.send(f"Instance {c.instance} is alive") else: remove_conns.append(c) for c in remove_conns: CONNECTIONS.remove(c) async def main(): async with serve(handler, "", 3003): await asyncio.get_running_loop().create_future() # run forever asyncio.run(main())