
    i                     P    d dl Z d dlmZ d\  ZZZZZZ	Z
g dZ G d d          ZdS )    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dS )PacketzSocket.IO packet.TNc                 v   || _         || _        || _        || _        | j        rg|s|c|                     | j                  rI| j         t          k    rt          | _         n,| j         t          k    rt          | _         nt          d          d| _        g | _        |r|                     |          pd| _        d S d S )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          :/usr/local/lib/python3.11/dist-packages/socketio/packet.py__init__zPacket.__init__   s    &	"" 	L	L"Nt/B/BI0 0N5((#/  !S((#-   !JKKK ! 	E$(KK$?$?$D1D!!!	E 	E    c                    t          | j                  }| j        t          k    s| j        t          k    r@|                     | j                  \  }}|t          t          |                    dz   z  }n	| j        }d}| j        | j        dk    r|| j        dz   z  }| j        |t          | j                  z  }||| 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/M $ 7 7	 B BD+c#k"2"233c99NN9DK>%$.C*?*?dns22N7c$'ll*NdioodzoJJJN",-;Nr#   c                 Z   |}	 t          |dd                   | _        n# t          $ r || _        d}Y nw xY wd| _        d| _        |dd         }|                    d          }d}|dk    rU|d|                                         r9|dk    rt          d          t          |d|                   }||dz   d         }|r|dd         dk    ru|                    d	          }|d
k    r
|| _        d}n|d|         | _        ||dz   d         }| j                            d          }|d
k    r| j        d|         | _        |r|d                                         rd}t          |          }||k     r,||                                         r|dk    rn|dz  }||k     ,t          |d|                   | _	        ||d         }t          |          dk    r)|d                                         rt          d          |r| j
                            |          | _        |S )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   sM    	"2ac7||D 	 	 	!DBBB	 	Vwws||!881T6
**,,8byy !7888"2af:D1HIIB 
	5"QqS'S..''#,,Cbyy!#!#AcEa\##C((ABww!%!!4 
	9"Q%--// 
	9Ab''Cc''!u}} !s((Q c'' "RaR&kkDGABBB2ww{{r!u}}{ !7888 	,	++DIs   ! 77c                    | j         t          | j                  k    rt          d          | j                            |           | j         t          | j                  k    r'|                     | j        | j                  | _        dS dS )NzUnexpected binary attachmentTF)r   r,   r   r   appendreconstruct_binaryr   )r   
attachments     r!   add_attachmentzPacket.add_attachmentu   s     C(8$9$999;<<<
+++ C(8$9$999//	4;KLLDI4ur#   c                 .    |                      ||          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BBr#   c                     t          |t                    r fd|D             S t          |t                    rH|                    d          rd|v r|d                  S  fd|                                D             S |S )Nc                 <    g | ]}                     |          S  rF   .0itemr   rI   s     r!   
<listcomp>z7Packet._reconstruct_binary_internal.<locals>.<listcomp>   9     & & & 44T;GG & & &r#   _placeholdernumc                 D    i | ]\  }}|                     |          S rL   rF   rN   keyvaluer   rI   s      r!   
<dictcomp>z7Packet._reconstruct_binary_internal.<locals>.<dictcomp>   sF     8 8 8&C S==e>IK K 8 8 8r#   )
isinstancelistdictgetitemsrH   s   ` `r!   rG   z#Packet._reconstruct_binary_internal   s    dD!! 	& & & & & $& & & &d## 	xx'' 8ETMM"4;//8 8 8 8 8*.**,,8 8 8 8 Kr#   c                 :    g }|                      ||          }||fS )z(Extract binary components in the packet._deconstruct_binary_internalrH   s      r!   r+   zPacket.deconstruct_binary   s)     //kBB[  r#   c                 J    t          |t          t          f          r*                    |           dt	                    dz
  dS t          |t
                    r fd|D             S t          |t                    r! fd|                                D             S |S )NTr   )rR   rS   c                 <    g | ]}                     |          S rL   r_   rM   s     r!   rP   z7Packet._deconstruct_binary_internal.<locals>.<listcomp>   rQ   r#   c                 D    i | ]\  }}|                     |          S rL   r_   rU   s      r!   rX   z7Packet._deconstruct_binary_internal.<locals>.<dictcomp>   s?     4 4 4"U 99%MM 4 4 4r#   )rY   bytes	bytearrayrA   r,   rZ   r[   r]   rH   s   ` `r!   r`   z#Packet._deconstruct_binary_internal   s    dUI.// 
	t$$$$([1A1AA1EFFFd## 	& & & & & $& & & &d## 	4 4 4 4 4&*jjll4 4 4 4 Kr#   c                 H    t          |t          t          f          rdS t          |t                    r#t	          j        d  fd|D             d          S t          |t                    r5t	          j        d  fd|                                D             d          S dS )z-Check if the data contains binary components.Tc                 
    | p|S NrL   abs     r!   <lambda>z'Packet.data_is_binary.<locals>.<lambda>   
    QV! r#   c                 :    g | ]}                     |          S rL   r   rN   rO   rI   s     r!   rP   z)Packet.data_is_binary.<locals>.<listcomp>   s7     &8 &8 &8*. '*&8&8&>&> &8 &8 &8r#   Fc                 
    | p|S rh   rL   ri   s     r!   rl   z'Packet.data_is_binary.<locals>.<lambda>   rm   r#   c                 :    g | ]}                     |          S rL   ro   rp   s     r!   rP   z)Packet.data_is_binary.<locals>.<listcomp>   s=     &A &A &A*. '*&8&8&>&> &A &A &Ar#   )rY   rd   re   rZ   	functoolsreducer[   values)rI   r   s   ` r!   r   zPacket.data_is_binary   s     dUI.// 	4d## 
	### &8 &8 &8 &826&8 &8 &89>@ @ @ d## 	### &A &A &A &A26++--&A &A &A  
 5r#   c                 R    | j         | j        | j        d}| j        
| j        |d<   |S )N)typer   nspr   )r   r   r   r   )r   ds     r!   _to_dictzPacket._to_dict   s8    $I>
 

 7gAdGr#   )__name__
__module____qualname____doc__r   _jsonr   r   r"   r.   r   rD   classmethodrB   rG   r+   r`   r   rz   rL   r#   r!   r   r   
   s        D#(ttTE E E E(  0.  .  . `   C C [C   [ ! ! [!   [   [     r#   r   )rs   engineior   r   r
   r   r   r   r   r   r   packet_namesr   rL   r#   r!   <module>r      s        " " " " " "  K*eS-z. . .x x x x x x x x x xr#   