Ë
    ÝÄ'j(  ã                   ó¤   — U d Z ddlZddlmZ g Zeej                     ed<   dej                  fd„Zdej                  ddfd„Z	d	e
eef   ddfd
„Zy)zò
Simple in-process pub/sub for Server-Sent Events (SSE).

Each SSE client calls subscribe() to get a Queue, then polls it.
publish() fans out events to all active queues.
Slow/full queues are silently dropped to avoid blocking the publisher.
é    N)ÚAnyÚ_subscribersÚreturnc                  ó\   — t        j                  d¬«      } t        j                  | «       | S )z?Register a new SSE client. Returns a queue to read events from.é   )Úmaxsize)ÚasyncioÚQueuer   Úappend©Úqs    ú2/var/www/html/zammad-automation/app/broadcaster.pyÚ	subscriber      s#   € ä—}‘}¨RÔ0€AÜ×Ñ˜ÔØ€Hó    r   c                 óN   — 	 t         j                  | «       y# t        $ r Y yw xY w)z-Remove a client queue (called on disconnect).N)r   ÚremoveÚ
ValueErrorr   s    r   Úunsubscriber      s'   € ðÜ×Ñ˜AÕøÜò Ùðús   ‚ ˜	$£$Úeventc                 óº   — g }t         D ]  }	 |j                  | «       Œ |D ]  }t        |«       Œ y# t        j                  $ r |j	                  |«       Y ŒPw xY w)zrBroadcast an event to all connected SSE clients.
    Clients whose queue is full are removed (assumed stale/slow).N)r   Ú
put_nowaitr	   Ú	QueueFullr   r   )r   Údeadr   s      r   Úpublishr      sc   € ð €DÜò ˆð	Ø�L‰L˜Õðð
 ò ˆÜ�A�ñøô × Ñ ò 	Ø�K‰K˜ŽNð	ús   �3³$AÁA)Ú__doc__r	   Útypingr   r   Úlistr
   Ú__annotations__r   r   ÚdictÚstrr   © r   r   ú<module>r"      sg   ðòó Ý à$&€ˆd�7—=‘=Ñ!Ó &ð�7—=‘=ó ð�7—=‘=ð  Tó ð
�4˜˜S˜‘>ð 
 dô 
r   