3
ñ\ð]  ã               @   s(   d dl Z ddlmZ G dd„ deƒZdS )é    Né   )ÚBaseManagerc                   s2   e Zd ZdZd	dd„Z‡ fdd„Zdd„ Z‡  ZS )
ÚAsyncManagerz+Manage a client list for an asyncio server.Nc             Ë   s¤   || j ks|| j | krdS g }t|tƒs0|g}xR| j||ƒD ]B}	|	|kr>|dk	rb| j|	||ƒ}
nd}
|j| jj|	||||
ƒƒ q>W |g kr�dS tj	|ƒI dH  dS )z•Emit a message to a single client, a room, or all the clients
        connected to the namespace.

        Note: this method is a coroutine.
        N)
ZroomsÚ
isinstanceÚlistZget_participantsZ_generate_ack_idÚappendÚserverZ_emit_internalÚasyncioÚwait)ÚselfÚeventÚdataÚ	namespaceÚroomZskip_sidÚcallbackÚkwargsZtasksÚsidÚid© r   úC/tmp/pip-build-mqc4i71p/python-socketio/socketio/asyncio_manager.pyÚemit   s    
zAsyncManager.emitc             ƒ   s   t ƒ j||ƒS )zXRemove all participants from a room.

        Note: this method is a coroutine.
        )ÚsuperÚ
close_room)r   r   r   )Ú	__class__r   r   r       s    zAsyncManager.close_roomc             Ã   s’   d}y| j | | | }W n" tk
r<   | jƒ jdƒ Y nX | j | | |= |dk	rŽ||Ž }tj|ƒrŽy|I dH  W n tjk
rŒ   Y nX dS )zSInvoke an application callback.

        Note: this method is a coroutine.
        Nz$Unknown callback received, ignoring.)Ú	callbacksÚKeyErrorZ_get_loggerÚwarningr	   ÚiscoroutineZCancelledError)r   r   r   r   r   r   Úretr   r   r   Útrigger_callback'   s    
zAsyncManager.trigger_callback)NNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   Ú__classcell__r   r   )r   r   r      s
    
r   )r	   Zbase_managerr   r   r   r   r   r   Ú<module>   s   