import asyncio from tinydb import TinyDB from settings import settings from proto import Computer db = TinyDB(settings.database_path) computers = db.table("computers") class StateManager: def __init__(self): self.websockets = set() self.current_state = None self.update_state() def update_state(self): self.current_state = {"computers": computers.all()} async def push_state(self, socket): try: await socket.send_json(self.current_state) except RuntimeError: print("dead socket?") self.websockets.remove(socket) async def on_connect(self, socket): self.websockets.add(socket) await self.push_state(socket) async def on_disconnect(self, socket): self.websockets.remove(socket) async def on_change(self): self.update_state() await asyncio.gather(*[self.push_state(socket) for socket in self.websockets]) async def on_computer_register(self, computer: Computer): # uUiD iS nOt JsOn SeRiAlIzAbLe computer_data = computer.dict() computer_data["uuid"] = str(computer_data["uuid"]) computers.insert(computer_data) await self.on_change()