Ë
    S"“jë  ã                   ó\   — 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m	Z	  G d„ d«      Z
y)é    Né   )Ú	TLRequest)ÚMessageContainer)Ú	TLMessagec                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚMessagePackeraN  
    This class packs `RequestState` as outgoing `TLMessages`.

    The purpose of this class is to support putting N `RequestState` into a
    queue, and then awaiting for "packed" `TLMessage` in the other end. The
    simplest case would be ``State -> TLMessage`` (1-to-1 relationship) but
    for efficiency purposes it's ``States -> Container`` (N-to-1).

    This addresses several needs: outgoing messages will be smaller, so the
    encryption and network overhead also is smaller. It's also a central
    point where outgoing requests are put, and where ready-messages are get.
    c                 ó’   — || _         t        j                  «       | _        t	        j
                  «       | _        |t           | _        y ©N)	Ú_stateÚcollectionsÚdequeÚ_dequeÚasyncioÚEventÚ_readyÚ__name__Ú_log)ÚselfÚstateÚloggerss      úb/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/telethon/extensions/messagepacker.pyÚ__init__zMessagePacker.__init__   s2   € ØˆŒÜ!×'Ñ'Ó)ˆŒÜ—m‘m“oˆŒØœHÑ%ˆ�	ó    c                 ón   — | j                   j                  |«       | j                  j                  «        y r
   )r   Úappendr   Úset)r   r   s     r   r   zMessagePacker.append   s"   € Ø�‰×Ñ˜5Ô!Ø�‰�‰Õr   c                 ón   — | j                   j                  |«       | j                  j                  «        y r
   )r   Úextendr   r   )r   Ústatess     r   r   zMessagePacker.extend#   s"   € Ø�‰×Ñ˜6Ô"Ø�‰�‰Õr   c              ƒ   óè  K  — | j                   s<| j                  j                  «        | j                  j                  «       ƒ d{  –—†  t	        j
                  «       }g }d}| j                   �rÛt        |«      t        j                  k  �r¾| j                   j                  «       }|t        |j                  «      t        j                  z   z  }|t        j                  k  rÔ| j                  j                  ||j                  t!        |j"                  t$        «      |j&                  r|j&                  j(                  nd¬«      |_        |j+                  |«       | j,                  j/                  d|j(                  |j"                  j0                  j2                  t5        |j"                  «      «       �ŒT|r| j                   j7                  |«       nv| j,                  j9                  d|j"                  j0                  j2                  t        |j                  «      «       |j:                  j=                  t?        d«      «       d}�Œè|syt        |«      dkD  rtA        jB                  d	t        jD                  t        |«      «      |jG                  «       z   }t	        j
                  «       }| j                  j                  ||d
¬«      }|D ]	  }||_$        Œ |jG                  «       }||fS 7 �Œ©­w)zÌ
        Returns (batch, data) if one or more items could be retrieved.

        If the cancellation occurs or only invalid items were in the
        queue, (None, None) will be returned instead.
        Nr   )Úafter_idzAssigned msg_id = %d to %s (%x)z:Message payload for %s is too long (%d) and cannot be sentzRequest payload is too big)NNé   z<IiF)Úcontent_related)%r   r   ÚclearÚwaitÚioÚBytesIOÚlenr   ÚMAXIMUM_LENGTHÚpopleftÚdatar   ÚSIZE_OVERHEADÚMAXIMUM_SIZEr   Úwrite_data_as_messageÚ
isinstanceÚrequestr   ÚafterÚmsg_idr   r   ÚdebugÚ	__class__r   ÚidÚ
appendleftÚwarningÚfutureÚset_exceptionÚ
ValueErrorÚstructÚpackÚCONSTRUCTOR_IDÚgetvalueÚcontainer_id)r   ÚbufferÚbatchÚsizer   r+   r?   Úss           r   ÚgetzMessagePacker.get'   sK  è ø€ ð �{Š{Ø�K‰K×ÑÔØ—+‘+×"Ñ"Ó$×$Ð$ä—‘“ˆØˆØˆð �k‹kœc %›jÔ,<×,KÑ,KÓKØ—K‘K×'Ñ'Ó)ˆEØ”C˜Ÿ
™
“O¤i×&=Ñ&=Ñ=Ñ=ˆDàÔ'×4Ñ4Ò4Ø#Ÿ{™{×@Ñ@Ø˜EŸJ™J¬
°5·=±=Ä)Ó(LØ38·;²;˜UŸ[™[×/Ò/ÀDð  Aó  �”ð —‘˜UÔ#Ø—	‘	—‘Ð AØ %§¡¨e¯m©m×.EÑ.E×.NÑ.NÜ " 5§=¡=Ó 1ô3ñ áà—‘×&Ñ& uÔ-Øð �I‰I×ÑØLØ—‘×'Ñ'×0Ñ0´#°e·j±j³/ôð �L‰L×&Ñ&ÜÐ7Ó8ô:ð ˆDÙáØäˆu‹:˜Š>ä—;‘;ØÔ'×6Ñ6¼¸E»
óà—‘Ó!ñ"ˆDô —Z‘Z“\ˆFØŸ;™;×<Ñ<Ø˜¨eð =ó ˆLð ò .�Ø!-�•ð.ð �‰Ó ˆØ�dˆ{Ðð %ûs   ‚AK2ÁK/ÁJ)K2N)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   rD   © r   r   r   r      s   „ ñò&òòóHr   r   )r   r   r&   r;   Útlr   Útl.core.messagecontainerr   Útl.core.tlmessager   r   rH   r   r   ú<module>rL      s&   ðÛ Û Û 	Û å Ý 7Ý )÷dò dr   