""" SSE broadcast for the animal-sounds worker. Not part of the openapi_first library API surface. """ import asyncio import random import json _sounds = ["woof", "meow", "coo"] _subscribers: list[asyncio.Queue] = [] _worker_task: asyncio.Task | None = None async def _sound_worker(): while True: sound = random.choice(_sounds) data = json.dumps({"sound": sound}) for q in _subscribers: await q.put(data) await asyncio.sleep(random.uniform(1, 5)) def start_worker(): global _worker_task _worker_task = asyncio.create_task(_sound_worker()) def stop_worker(): if _worker_task is not None: _worker_task.cancel() async def subscribe() -> asyncio.Queue: q: asyncio.Queue = asyncio.Queue() _subscribers.append(q) return q def unsubscribe(q: asyncio.Queue): if q in _subscribers: _subscribers.remove(q)