§
    ‹Ÿj·,  ã                  ó
  — U d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlZddlmZ ddlmZ dd	lmZ  eed
¦  «        rej        ej        fZded<   ndZd„ Z G d„ de¦  «        Z G d„ dee         ¦  «        ZdS )ziThis module wraps the :class:`Socket` and :class:`Context` found in :mod:`pyzmq <zmq>` to be non blockingé    )ÚannotationsN)ÚAsyncResult)Úget_hub)ÚContext)ÚSocketé   )Ú_PollerÚRCVTIMEOÚtupleÚTIMEOS© c                óz   — 	 |                       ¦   «          dS # t          $ r |                      ¦   «          Y dS w xY w)zNsimple wrapper for stopping an Event, allowing for method rename in gevent 1.0N)ÚstopÚAttributeErrorÚcancel)Úevts    ú[/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/zmq/green/core.pyÚ_stopr   #   sF   € ðØ�Š‰
Œ
ˆ
ˆ
ˆ
øÝð ð ð à�
Š
‰Œˆˆˆˆðøøøs   ‚ ˜:¹:c                  óÎ   ‡ — e Zd ZdZdZdZdZdZdZdZ	dZ
eZdZˆ fd„Zd„ Zdˆ fd„	Zd	„ Zd
„ Zdˆ fd„	Zd„ Zd„ Zdˆ fd„	Zdˆ fd„	Zdddœˆ fd„
Zˆ fd„Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZS )Ú_SocketaK  Green version of :class:`zmq.Socket`

    The following methods are overridden:

        * send
        * recv

    To ensure that the ``zmq.NOBLOCK`` flag is set and that sending or receiving
    is deferred to the hub if a ``zmq.EAGAIN`` (retry) error is raised.

    The `__state_changed` method is triggered when the zmq.FD for the socket is
    marked as readable and triggers the necessary read and write events (which
    are waited for in the recv and send methods).

    Some double underscore prefixes are used to minimize pollution of
    :class:`zmq.Socket`'s namespace.
    FNg333333'@zzmq.green.Socketc                ó~   •—  t          ¦   «         j        |i |¤Ž d| _        d| _        |                      ¦   «          d S )NF)ÚsuperÚ__init__Ú_Socket__in_send_multipartÚ_Socket__in_recv_multipartÚ_Socket__setup_events)ÚselfÚaÚkwÚ	__class__s      €r   r   z_Socket.__init__I   sG   ø€ Ø�‰ŒÔ˜!Ð"˜rÐ"Ð"Ð"Ø#(ˆÔ Ø#(ˆÔ Ø×ÒÑÔÐÐÐó    c                ó.   — |                       ¦   «          d S ©N)Úclose©r   s    r   Ú__del__z_Socket.__del__O   s   € Ø�
Š
‰Œˆˆˆr!   c                ór   •— t          ¦   «                              |¦  «         |                      ¦   «          d S r#   )r   r$   Ú_Socket__cleanup_events)r   Úlingerr    s     €r   r$   z_Socket.closeR   s1   ø€ Ý‰Œ�Š�fÑÔÐØ×ÒÑÔÐÐÐr!   c                óÂ   — t          | dd ¦  «        rt          | j        ¦  «         d | _        | j                             ¦   «          | j                             ¦   «          d S )NÚ_state_event)Úgetattrr   r+   Ú_Socket__writableÚsetÚ_Socket__readabler%   s    r   Ú__cleanup_eventsz_Socket.__cleanup_eventsV   s]   € å�4˜¨Ñ.Ô.ð 	%Ý�$Ô#Ñ$Ô$Ð$Ø $ˆDÔàŒ×ÒÑÔÐØŒ×ÒÑÔÐÐÐr!   c                ó   — t          ¦   «         | _        t          ¦   «         | _        | j                             ¦   «          | j                             ¦   «          	 t	          ¦   «         j                             |                      t          j	        ¦  «        d¦  «        | _
        | j
                             | j        ¦  «         d S # t          $ r? ddlm}  ||                      t          j	        ¦  «        | j        d¬¦  «        | _
        Y d S w xY w)Nr   r   )Ú
read_eventT)Úpersist)r   r/   r-   r.   r   ÚloopÚioÚ
getsockoptÚzmqÚFDr+   ÚstartÚ_Socket__state_changedr   Úgevent.corer2   )r   r2   s     r   Ú__setup_eventsz_Socket.__setup_events_   sÿ   € Ý%™-œ-ˆŒÝ%™-œ-ˆŒØŒ×ÒÑÔÐØŒ×ÒÑÔÐð	Ý '¡	¤	¤× 1Ò 1Ø—’¥¤Ñ'Ô'¨ñ!ô !ˆDÔð Ô×#Ò# DÔ$8Ñ9Ô9Ð9Ð9Ð9øÝð 	ð 	ð 	à.Ð.Ð.Ð.Ð.Ð.à * 
Ø—’¥¤Ñ'Ô'¨Ô)=Àtð!ñ !ô !ˆDÔÐÐÐð		øøøs   ÁA(C ÃADÄDc                óà  •— | j         r|                      ¦   «          d S 	 t          ¦   «                              t          j        ¦  «        }|t          j        z  r| j                             ¦   «          |t          j	        z  r| j
                             ¦   «          d S d S # t          j        $ r?}| j                             |¦  «         | j
                             |¦  «         Y d }~d S d }~ww xY wr#   )Úclosedr(   r   r6   r7   ÚEVENTSÚPOLLOUTr-   r.   ÚPOLLINr/   ÚZMQErrorÚset_exception)r   ÚeventÚ_evtypeÚeventsÚexcr    s        €r   Ú__state_changedz_Socket.__state_changedr   sû   ø€ ØŒ;ð 	Ø×!Ò!Ñ#Ô#Ð#ØˆFð
	&å‘W”W×'Ò'­¬
Ñ3Ô3ˆFð
 �œÑ#ð &Ø”×#Ò#Ñ%Ô%Ð%Ø�œ
Ñ"ð &Ø”×#Ò#Ñ%Ô%Ð%Ð%Ð%ð&ð &øõ Œ|ð 	/ð 	/ð 	/ØŒO×)Ò)¨#Ñ.Ô.Ð.ØŒO×)Ò)¨#Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.øøøøð	/øøøs    +B ÂC-Â.4C(Ã(C-c                ó2  — | j                              ¦   «         s
J d¦   «         ‚t          ¦   «         | _         t          j        ¦   «         }| j        }|rt          j        |¬¦  «        }nd }	 |r|                     ¦   «          | j                              d¬¦  «         n–# t
          j        $ r„}||ur‚ t          j        ¦   «         }| j	        r[|rY||z
  |k    rP|  
                    t          j        ¦  «        t          j        z  r$t          d| j        › d�t           j        ¬¦  «         Y d }~nd }~ww xY w|r|                     ¦   «          | j                              ¦   «          d S # |r|                     ¦   «          | j                              ¦   «          w xY w)Nú.Only one greenlet can be waiting on this event©ÚsecondsT©Úblockz3BUG: gevent may have missed a libzmq send event on ú!©Úfile)r-   Úreadyr   ÚtimeÚ_gevent_bug_timeoutÚgeventÚTimeoutr9   ÚgetÚ_debug_geventr6   r7   r?   r@   Úprintr8   ÚsysÚstderrr$   r.   ©r   ÚticÚdtÚtimeoutÚtÚtocs         r   Ú_wait_writez_Socket._wait_write‚   s­  € ØŒ×$Ò$Ñ&Ô&ÐXÐXÐ(XÑXÔXÐXÝ%™-œ-ˆŒõ Œi‰kŒkˆØÔ%ˆØð 	Ý”n¨RÐ0Ñ0Ô0ˆGˆGàˆGð	"Øð  Ø—’‘”�ØŒO×Ò dÐÑ+Ô+Ð+Ð+øÝŒ~ð 	ð 	ð 	Ø˜ÐÐØÝ”)‘+”+ˆCð Ô"ð	àð	ð ˜#‘I ’N�NØ—O’O¥C¤JÑ/Ô/µ#´+Ñ=ð #õ ØTÈ$Ì'ÐTÐTÐTÝœðñ ô ð øøøøøøøøøð	øøøð" ð  Ø—’‘”�ØŒO×ÒÑ!Ô!Ð!Ð!Ð!øð ð  Ø—’‘”�ØŒO×ÒÑ!Ô!Ð!Ð!øøøó1   Á,1B ÂE% ÂD1Â-A:D,Ä'E% Ä,D1Ä1E% Å%1Fc                ó2  — | j                              ¦   «         s
J d¦   «         ‚t          ¦   «         | _         t          j        ¦   «         }| j        }|rt          j        |¬¦  «        }nd }	 |r|                     ¦   «          | j                              d¬¦  «         n–# t
          j        $ r„}||ur‚ t          j        ¦   «         }| j	        r[|rY||z
  |k    rP|  
                    t          j        ¦  «        t          j        z  r$t          d| j        › d�t           j        ¬¦  «         Y d }~nd }~ww xY w|r|                     ¦   «          | j                              ¦   «          d S # |r|                     ¦   «          | j                              ¦   «          w xY w)NrJ   rK   TrM   z3BUG: gevent may have missed a libzmq recv event on rO   rP   )r/   rR   r   rS   rT   rU   rV   r9   rW   rX   r6   r7   r?   rA   rY   r8   rZ   r[   r$   r.   r\   s         r   Ú
_wait_readz_Socket._wait_read¦   s­  € ØŒ×$Ò$Ñ&Ô&ÐXÐXÐ(XÑXÔXÐXÝ%™-œ-ˆŒõ
 Œi‰kŒkˆØÔ%ˆØð 	Ý”n¨RÐ0Ñ0Ô0ˆGˆGàˆGð	"Øð  Ø—’‘”�ØŒO×Ò dÐÑ+Ô+Ð+Ð+øÝŒ~ð 	ð 	ð 	Ø˜ÐÐØÝ”)‘+”+ˆCð Ô"ð	àð	ð ˜#‘I ’N�NØ—O’O¥C¤JÑ/Ô/µ#´*Ñ<ð #õ ØTÈ$Ì'ÐTÐTÐTÝœðñ ô ð øøøøøøøøøð	øøøð" ð  Ø—’‘”�ØŒO×ÒÑ!Ô!Ð!Ð!Ð!øð ð  Ø—’‘”�ØŒO×ÒÑ!Ô!Ð!Ð!øøørc   r   Tc                óD  •— |t           j        z  r]	  t          ¦   «         j        ||||fi |¤Ž}| j        s|                      ¦   «          n!# | j        s|                      ¦   «          w w xY w|S |t           j        z  }	 	 t          ¦   «                              ||||¦  «        }| j        s|                      ¦   «          |S # t           j        $ r;}|j        t           j        k    r| j        s|                      ¦   «          ‚ Y d}~nd}~ww xY w|  	                    ¦   «          Œ¤)z›send, which will only block current greenlet

        state_changed always fires exactly once (success or fail) at the
        end of this method.
        TN)
r7   ÚNOBLOCKr   Úsendr   r:   rB   ÚerrnoÚEAGAINrb   )	r   ÚdataÚflagsÚcopyÚtrackÚkwargsÚmsgÚer    s	           €r   rh   z_Socket.sendÌ   s[  ø€ ð •3”;Ñð 	ð+Ø"•e‘g”g”l 4¨°°eÐFÐF¸vÐFÐF�àÔ/ð +Ø×(Ò(Ñ*Ô*Ð*øøð Ô/ð +Ø×(Ò(Ñ*Ô*Ð*Ð*ð+øøøàˆJà•”Ñˆð	ðå‘g”g—l’l 4¨°°eÑ<Ô<�ð Ô/ð +Ø×(Ò(Ñ*Ô*Ð*Ø�
øõ ”<ð ð ð à”7�cœjÒ(Ð(ØÔ3ð /Ø×,Ò,Ñ.Ô.Ð.Øð )Ð(Ð(Ð(Ð(øøøøðøøøð ×ÒÑÔÐð	s#   ’A ÁA)Á?$C  Ã D
Ã1DÄD
c                óN  •— |t           j        z  rc	 t          ¦   «                              |||¦  «        }| j        s|                      ¦   «          n!# | j        s|                      ¦   «          w w xY w|S |t           j        z  }	 	 t          ¦   «                              |||¦  «        }| j        s|                      ¦   «          |S # t           j        $ r;}|j        t           j        k    r| j        s|                      ¦   «          ‚ Y d}~nd}~ww xY w|  	                    ¦   «          Œ£)z›recv, which will only block current greenlet

        state_changed always fires exactly once (success or fail) at the
        end of this method.
        TN)
r7   rg   r   Úrecvr   r:   rB   ri   rj   re   )r   rl   rm   rn   rp   rq   r    s         €r   rs   z_Socket.recvî   sM  ø€ ð •3”;Ñð 	ð+Ý‘g”g—l’l 5¨$°Ñ6Ô6�àÔ/ð +Ø×(Ò(Ñ*Ô*Ð*øøð Ô/ð +Ø×(Ò(Ñ*Ô*Ð*Ð*ð+øøøàˆJà•”Ñˆð	ð
Ý‘g”g—l’l 5¨$°Ñ6Ô6�ð Ô/ð +Ø×(Ò(Ñ*Ô*Ð*Ø�
øõ ”<ð ð ð Ø”7�cœjÒ(Ð(ØÔ3ð /Ø×,Ò,Ñ.Ô.Ð.Øð )Ð(Ð(Ð(Ð(øøøøðøøøð �OŠOÑÔÐð	s#   ’#A ÁA/Â#C ÃDÃ1D
Ä
D©Únbytesrl   c              ó¶  •— |t           j        z  r$t          ¦   «                              |||¬¦  «        S |t           j        z  }	 	 t          ¦   «                              |||¬¦  «        }|                      ¦   «          |S # t           j        $ r4}|j        t           j        k    r|                      ¦   «          ‚ Y d}~nd}~ww xY w|                      ¦   «          Œ–)z1recv_into, which will only block current greenletrt   TN)	r7   ÚDONTWAITr   Ú	recv_intor:   rB   ri   rj   re   )r   Úbufferru   rl   Úrecvdrq   r    s         €r   rx   z_Socket.recv_into  sî   ø€ à•3”<Ñð 	IÝ‘7”7×$Ò$ V°FÀ%Ð$ÑHÔHÐHØ•”Ñˆð
	ðÝ™œ×)Ò)¨&¸ÀuÐ)ÑMÔM�ð ×$Ò$Ñ&Ô&Ð&Ø�øõ ”<ð ð ð Ø”7�cœjÒ(Ð(Ø×(Ò(Ñ*Ô*Ð*Øð )Ð(Ð(Ð(Ð(øøøøðøøøð �OŠOÑÔÐð
	s   Á$B  Â CÂ*B>Â>Cc                óÂ   •— d| _         	  t          ¦   «         j        |i |¤Ž}d| _         |                      ¦   «          n # d| _         |                      ¦   «          w xY w|S )zAwrap send_multipart to prevent state_changed on each partial sendTF)r   r   Úsend_multipartr:   ©r   Úargsro   rp   r    s       €r   r|   z_Socket.send_multipart  óp   ø€ à#'ˆÔ ð	#Ø(•%‘'”'Ô(¨$Ð9°&Ð9Ð9ˆCà',ˆDÔ$Ø× Ò Ñ"Ô"Ð"Ð"øð (-ˆDÔ$Ø× Ò Ñ"Ô"Ð"Ð"øøøØˆ
ó	   Š? ¿Ac                óÂ   •— d| _         	  t          ¦   «         j        |i |¤Ž}d| _         |                      ¦   «          n # d| _         |                      ¦   «          w xY w|S )zAwrap recv_multipart to prevent state_changed on each partial recvTF)r   r   Úrecv_multipartr:   r}   s       €r   r‚   z_Socket.recv_multipart&  r   r€   c                óØ   •— |t           v rt          j        dt          ¦  «         t	          ¦   «                              |¦  «        }|t          j        k    r|                      ¦   «          |S )z+trigger state_changed on getsockopt(EVENTS)ú0TIMEO socket options have no effect in zmq.green)	r   ÚwarningsÚwarnÚUserWarningr   rW   r7   r?   r:   )r   ÚoptÚoptvalr    s      €r   rW   z_Socket.get0  s`   ø€ à•&ˆ=ˆ=ÝŒMØBÅKñô ð õ ‘”—’˜SÑ!Ô!ˆØ•#”*ÒÐØ× Ò Ñ"Ô"Ð"Øˆr!   c                óŽ   •— |t           v rt          j        dt          ¦  «         t	          ¦   «                              ||¦  «        S )zset socket optionr„   )r   r…   r†   r‡   r   r.   )r   rˆ   Úvalr    s      €r   r.   z_Socket.set;  s?   ø€ à•&ˆ=ˆ=ÝŒMØBÅKñô ð õ ‰wŒw�{Š{˜3 Ñ$Ô$Ð$r!   r#   )NN)r   TF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r-   r/   r+   rT   rX   r	   Ú_poller_classÚ	_repr_clsr   r&   r$   r(   r   r:   rb   re   rh   rs   rx   r|   r‚   rW   r.   Ú__classcell__)r    s   @r   r   r   ,   sÈ  ø€ € € € € ðð ð$  ÐØÐØ€JØ€JØ€LØÐØ€MØ€MØ"€Iðð ð ð ð ðð ð ð ð  ð  ð  ð  ð  ðð ð ðð ð ð&&ð &ð &ð &ð &ð &ð ""ð ""ð ""ðH$"ð $"ð $"ðL ð  ð  ð  ð  ð  ðDð ð ð ð ð ð: ./°að ð ð ð ð ð ð ð"ð ð ð ð ðð ð ð ð ð	ð 	ð 	ð 	ð 	ð%ð %ð %ð %ð %ð %ð %ð %ð %r!   r   c                  ó   — e Zd ZdZeZdZdZdS )Ú_ContextzrReplacement for :class:`zmq.Context`

    Ensures that the greened Socket above is used in calls to `socket`.
    zzmq.green.ContextN)rŒ   r�   rŽ   r�   r   Ú_socket_classr‘   Ú	_instancer   r!   r   r”   r”   D  s+   € € € € € ðð ð
 €MØ#€Ið €I€I€Ir!   r”   )r�   Ú
__future__r   rZ   rS   r…   rU   Úgevent.eventr   Ú
gevent.hubr   r7   r   Ú_original_Contextr   Ú_original_SocketÚpollr	   Úhasattrr
   ÚSNDTIMEOr   Ú__annotations__r   r   r”   r   r!   r   ú<module>r       s]  ðð pÐ oÐ oà "Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø €€€Ø €€€à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à 
€
€
€
Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð Ð Ð à
€7ˆ3�
ÑÔð Ø”\ 3¤<Ð0€FÐ0Ð0Ð0Ñ0Ð0à€Fðð ð ðU%ð U%ð U%ð U%ð U%Ðñ U%ô U%ð U%ðp
ð 
ð 
ð 
ð 
Ð  Ô)ñ 
ô 
ð 
ð 
ð 
r!   