Spaces:
Sleeping
Sleeping
File size: 945 Bytes
71b4454 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import asyncio
import json
from typing import Dict, AsyncGenerator
class SSEStreamManager:
def __init__(self):
self._queues: Dict[str, asyncio.Queue] = {}
def get_queue(self, session_id: str) -> asyncio.Queue:
if session_id not in self._queues:
self._queues[session_id] = asyncio.Queue()
return self._queues[session_id]
async def publish(self, session_id: str, event_type: str, data: dict):
queue = self.get_queue(session_id)
payload = f"event: {event_type}\ndata: {json.dumps(data)}\n\n"
await queue.put(payload)
async def event_generator(self, session_id: str) -> AsyncGenerator[str, None]:
queue = self.get_queue(session_id)
try:
while True:
data = await queue.get()
yield data
queue.task_done()
except asyncio.CancelledError:
pass
sse_manager = SSEStreamManager()
|