hss-lattepanda-win-scripts/websockets/server.py
2024-09-10 13:44:19 +02:00

46 lines
1.3 KiB
Python

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())