
    !ni                     H    d dl Z d dlmZ d\  ZZZZZZ	Z
g dZ G d d      Zy)    N)json)r                     )CONNECT
DISCONNECTEVENTACKCONNECT_ERRORBINARY_EVENT
BINARY_ACKc                       e Zd ZdZdZeZedddddfdZd Z	d Z
d Zed        Zed	        Zed
        Zed        Zed        Zd Zy)PacketzSocket.IO packet.TNc                 z   || _         || _        || _        || _        | j                  rh|s|d| j                  | j                        rI| j                   t        k(  rt        | _         n*| j                   t        k(  rt        | _         nt        d      d| _        g | _        |r| j                  |      xs d| _        y y )Nz'Packet does not support binary payload.r   )packet_typedata	namespaceiduses_binary_eventsdata_is_binaryr   r   r   r   
ValueErrorattachment_countattachmentsdecode)selfr   r   r   r   binaryencoded_packets          O/home/homepc/tiktok-worker/venv/lib/python3.12/site-packages/socketio/packet.py__init__zPacket.__init__   s    &	"""FNt/B/BII05(#/ !!S(#-  !JKK !$(KK$?$D1D!     c                     t        | j                        }| j                  t        k(  s| j                  t        k(  r9| j	                  | j
                        \  }}|t        t        |            dz   z  }n| j
                  }d}| j                  !| j                  dk7  r|| j                  dz   z  }| j                  |t        | j                        z  }| || j                  j                  |d      z  }||g|z   }|S )a  Encode the packet for transmission.

        If the packet contains binary elements, this function returns a list
        of packets where the first is the original packet with placeholders for
        the binary components and the remaining ones the binary attachments.
        -N/,)r'   :)
separators)strr   r   r   deconstruct_binaryr   lenr   r   r   dumps)r   r    r   r   s       r!   encodezPacket.encode-   s     T--.|+t/?/?:/M $ 7 7		 BD+c#k"23c99N99DK>>%$..C*?dnns22N77c$''l*NdiioodzoJJN",-;Nr#   c                 n   |}	 t        |dd       | _        d| _        d| _        |dd }|j                  d      }d}|dkD  r9|d| j                         r&|dkD  rt        d      t        |d|       }||dz   d }|rn|dd dk(  rf|j                  d	      }|d
k(  r
|| _        d}n|d| | _        ||dz   d }| j                  j                  d      }|d
k7  r| j                  d| | _        |r|d   j                         rzd}t        |      }||k  r$||   j                         r|dk\  rn|dz  }||k  r$t        |d|       | _	        ||d }t        |      dkD  r|d   j                         rt        d      |r | j                  j                  |      | _        |S # t        $ r || _        d}Y w xY w)zDecode a transmitted package.

        The return value indicates how many binary attachment packets are
        necessary to fully decode the packet.
        r   r    Nr%   
   ztoo many attachmentsr&   r'   ?d   zid field is too long)intr   	TypeErrorr   r   findisdigitr   r,   r   r   loads)	r   r    epdashr   sepqiends	            r!   r   zPacket.decodeE   s    	"2a7|D 	Vwws|!81T
**,by !788"2a:D1HIB"Qq'S.''#,Cby!#!#Aca\##C(ABw!%!!4"Q%--/Ab'Cc'!u}}!s(Q c' "Ra&kDGABB2w{r!u}} !788		+DIK  	!DB	s   F F43F4c                 0   | j                   t        | j                        k  rt        d      | j                  j	                  |       | j                   t        | j                        k(  r,| j                  | j                  | j                        | _        yy)NzUnexpected binary attachmentTF)r   r,   r   r   appendreconstruct_binaryr   )r   
attachments     r!   add_attachmentzPacket.add_attachmentu   sx      C(8(8$99;<<
+  C(8(8$99//		4;K;KLDIr#   c                 &    | j                  ||      S )zYReconstruct a decoded packet using the given list of binary
        attachments.
        )_reconstruct_binary_internalclsr   r   s      r!   rB   zPacket.reconstruct_binary~   s    
 //kBBr#   c           	      >   t        |t              r |D cg c]  }| j                  ||       c}S t        |t              rQ|j	                  d      rd|v r||d      S |j                         D ci c]  \  }}|| j                  ||       c}}S |S c c}w c c}}w )N_placeholdernum)
isinstancelistrF   dictgetitemsrH   r   r   itemkeyvalues         r!   rF   z#Packet._reconstruct_binary_internal   s    dD! $& 44T;G & &d#xx'ETM"4;// +/**,8&C S==e>IK K 8 8 K&8s   B1Bc                 2    g }| j                  ||      }||fS )z(Extract binary components in the packet.)_deconstruct_binary_internalrG   s      r!   r+   zPacket.deconstruct_binary   s&     //kB[  r#   c           	      t   t        |t        t        f      r"|j                  |       dt	        |      dz
  dS t        |t
              r |D cg c]  }| j                  ||       c}S t        |t              r4|j                         D ci c]  \  }}|| j                  ||       c}}S |S c c}w c c}}w )NTr   )rJ   rK   )	rL   bytes	bytearrayrA   r,   rM   rV   rN   rP   rQ   s         r!   rV   z#Packet._deconstruct_binary_internal   s    dUI./t$$([1AA1EFFd# $& 44T;G & &d#&*jjl4"U 99%MM 4 4 K&4s   B/B4c           	      v   t        |t        t        f      ryt        |t              r5t	        j
                  d |D cg c]  }| j                  |       c}d      S t        |t              rCt	        j
                  d |j                         D cg c]  }| j                  |       c}d      S yc c}w c c}w )z-Check if the data contains binary components.Tc                     | xs |S N abs     r!   <lambda>z'Packet.data_is_binary.<locals>.<lambda>   
    QV! r#   Fc                     | xs |S r\   r]   r^   s     r!   ra   z'Packet.data_is_binary.<locals>.<lambda>   rb   r#   )	rL   rX   rY   rM   	functoolsreducer   rN   values)rH   r   rR   s      r!   r   zPacket.data_is_binary   s     dUI./d####26&8*. '*&8&8&> &89>@ @ d####26++-&A*. '*&8&8&> &A 
 &8&As   B1
B6
c                     | j                   | j                  | j                  d}| j                  | j                  |d<   |S )N)typer   nspr   )r   r   r   r   )r   ds     r!   _to_dictzPacket._to_dict   s>    $$II>>

 77ggAdGr#   )__name__
__module____qualname____doc__r   _jsonr   r   r"   r.   r   rD   classmethodrB   rF   r+   rV   r   rk   r]   r#   r!   r   r   
   s     D#(ttTE(0. ` C C   ! !     r#   r   )rd   engineior   rp   r
   r   r   r   r   r   r   packet_namesr   r]   r#   r!   <module>rt      s7     "  K*eS-z.x xr#   