
    hk2                     V   d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d	Z G d
 de      Z ej4                  e       dedeee   ee   f   fdZ G d de      Z G d de      Z G d de      Z  G d de       Z! G d de       Z"y)    N)OptionalDictTuple)hlval)protocol)ConnectionDenyConnectionRequestConnectionResponse)TransportDetails)
ITransportISession)ProtocolErrorSerializationErrorTransportLost)WampWebSocketServerProtocolWampWebSocketClientProtocolWampWebSocketServerFactoryWampWebSocketClientFactoryc                       e Zd ZU dZdZee   ed<   dZee	   ed<   dde
dee   fdZd Zd	ede
dee   fd
ZdedefdZd Zd Zedee	   fd       Zd Zd Zy)WampWebSocketProtocolz>
    Base class for WAMP-over-WebSocket transport mixins.
    N_session_transport_detailscodereasonc                 d    | j                   j                  d||       | j                  ||       y )NzEFailing WAMP-over-WebSocket transport: code={code}, reason="{reason}")r   r   )logdebug_fail_connection)selfr   r   s      S/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/wamp/websocket.py_bailoutzWampWebSocketProtocol._bailout5   s0    ^ei$ 	 	&dF+    c                    	 | j                   j                         | _        | | j                  _        | j                  j	                  |        y# t
        $ ru}| j                  j                  dt        j                                dj                  |      }| j                  t        j                  j                  |       Y d}~yd}~ww xY w)z^
        Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onOpen`
        {tb}tbWAMP Internal Error ({0})r   N)factory_factoryr   
_transportonOpen	Exceptionr   critical	traceback
format_excformatr!   r   WebSocketProtocol CLOSE_STATUS_CODE_INTERNAL_ERROR)r   er   s      r    r,   zWampWebSocketProtocol.onOpen:   s    	f LL113DM'+DMM$MM  & 	fHHf)=)=)?@077:FMM(44UU^dMee	fs   AA 	CA+CCwasCleanc                 ,   || _         | j                  C	 | j                  j                  d|||       | j                  j	                  |       d| _        yy# t
        $ r2 | j                  j                  dt        j                                Y Cw xY w)z_
        Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onClose`
        NzWWAMP-over-WebSocket transport lost: wasClean={wasClean}, code={code}, reason="{reason}")r5   r   r   r$   r%   )	_onclose_reasonr   r   r   onCloser-   r.   r/   r0   )r   r5   r   r   s       r    r8   zWampWebSocketProtocol.onCloseJ   s    
  &==$Em%D  A %%h/ !DM %  E!!&Y-A-A-C!DEs   :A 8BBpayloadisBinaryc                    	 | j                   j                  ||      D ]  }| j                  j                  dt	        ddd      | j
                  j                  r"t	        | j
                  j                  dd      nd| j
                  j                  r"t	        | j
                  j                  dd      ndt	        ddd      t	        d	dd      |
       | j
                  j                  |        y# t        $ ru}| j                  j                  dt        j                                dj                  |      }| j                  t        j                   j"                  |       Y d}~yd}~wt$        $ ru}| j                  j                  dt        j                                dj                  |      }| j                  t        j                   j&                  |       Y d}~yd}~ww xY w)za
        Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onMessage`
        <
{action1}{session}, {authid}{action2}
  {message}
{action3}zWAMP-Receive(greenTcolorboldF-z) <<z<<action1authidsessionaction2action3messager$   r%   zWAMP Protocol Error ({0})r(   Nr'   )_serializerunserializer   tracer   r   _authid_session_id	onMessager   r.   r/   r0   r1   r!   r   r2    CLOSE_STATUS_CODE_PROTOCOL_ERRORr-   r3   )r   r9   r:   msgr4   r   s         r    rN   zWampWebSocketProtocol.onMessage]   s   	f''33GXF`',_GRV'WaeananavaveDMM,A,AW\&]|fjfsfsffuT]]-F-Fg\a'b  FI',V7'N',Tt'L'*  , '', G  	fHHf)=)=)?@077:FMM(44UU^dMee 	fHHf)=)=)?@077:FMM(44UU^dMee	fs&   C2C5 5	G/>A+E..G/:A+G**G/c                    | j                         r	 | j                  j                  dt        ddd      | j                  j
                  r"t        | j                  j
                  dd      nd| j                  j                  r"t        | j                  j                  dd      ndt        ddd      t        d	dd      |
       | j                  j                  |      \  }}| j                  ||       yt               # t        $ rI}| j                  j                  dj                  |             t        dj                  |            d}~ww xY w)zM
        Implements :func:`autobahn.wamp.interfaces.ITransport.send`
        r<   zWAMP-Transmit(redTr>   FrA   z) >>z>>rB   z$WAMP message serialization error: {}z%WAMP message serialization error: {0}N)isOpenr   rK   r   r   rL   rM   rI   	serializesendMessager-   errorr1   r   r   )r   rP   r9   r:   r4   s        r    sendzWampWebSocketProtocol.sendv   s&    ;;=4`',-=UQU'V_c_l_l_t_teDMM,A,AUZ&[z}dhdqdqd}d}uT]]-F-FeZ_'`  DG',V5t'L',TT'J'*  , %)$4$4$>$>s$C!   (3/!  \ELLQOP()P)W)WXY)Z[[\s   CD 	EAEEc                     | j                   duS )zO
        Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen`
        N)r   r   s    r    rS   zWampWebSocketProtocol.isOpen   s     }}D((r"   returnc                     | j                   S )zZ
        Implements :func:`autobahn.wamp.interfaces.ITransport.transport_details`
        )r   rY   s    r    transport_detailsz'WampWebSocketProtocol.transport_details   s    
 &&&r"   c                     | j                         r*| j                  t        j                  j                         yt               )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.close`
        N)rS   	sendCloser   r2   CLOSE_STATUS_CODE_NORMALr   rY   s    r    closezWampWebSocketProtocol.close   s-     ;;=NN855NNO/!r"   c                     | j                         r*| j                  t        j                  j                         yt               )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.abort`
        N)rS   r!   r   r2   CLOSE_STATUS_CODE_GOING_AWAYr   rY   s    r    abortzWampWebSocketProtocol.abort   s-     ;;=MM(44QQR/!r"   N)__name__
__module____qualname____doc__r   r   r   __annotations__r   r   intstrr!   r,   boolr8   bytesrN   rW   rS   propertyr\   r`   rc    r"   r    r   r   -   s     $(Hhx '59!129,S ,(3- ,
f ! !C !# !&f f$ f2".) '8,<#= ' '""r"   r   subprotocolrZ   c                     	 | j                  d      }|d   dk7  rt        dj                  |d               t        |d         }dj	                  |dd        }||fS #  Y yxY w)N.r   wampzFWAMP WebSocket subprotocol identifier must start with "wamp", not "{}"      )NN)splitr-   r1   rj   join)rp   sversionserializer_ids       r    parseSubprotocolIdentifierr{      su    c"Q46>dkklmnolpqrrad)12%%s   AA A"c                   >    e Zd ZdZdZdedeee   e	eef   f   fdZ
y)r   z:
    Mixin for WAMP-over-WebSocket server transports.
    TrequestrZ   c                 $   i }|j                   D ]s  }t        |      \  }}|dk(  s|| j                  j                  j	                         v s>t        j
                  | j                  j                  |         | _        ||fc S  | j                  rLt        t        j                  dj                  dj                  | j                  j                                     t        j
                  | j                  j                  d         | _        d|fS )a
        Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onConnect`
        ru   z1This server only speaks WebSocket subprotocols {}, jsonN)	protocolsr{   r)   _serializerskeyscopyrI   STRICT_PROTOCOL_NEGOTIATIONr   BAD_REQUESTr1   rw   )r   r}   headersrp   ry   serializerIds         r    	onConnectz%WampWebSocketServerProtocol.onConnect   s     ",,K$>{$K!G\!|0I0I0N0N0P P#'99T\\-F-F|-T#U "G++ - ++ !;!;=p=w=w		$,,001>3 4 4  $yy)B)B6)JKD= r"   N)re   rf   rg   rh   r   r	   r   r   rk   r   r   ro   r"   r    r   r      s<     #'!!2 !uXc]DQTVYQYN=Z7[ !r"   r   c                        e Zd ZdZdZdefdZy)r   z:
    Mixin for WAMP-over-WebSocket client transports.
    Tresponsec                 r   |j                   | j                  j                  vrL| j                  r=t	        dj                  dj                  | j                  j                                    d}nt        |j                         \  }}t        j                  | j                  j                  |         | _
        y)r   zLThe server does not speak any of the WebSocket subprotocols {} we requested.r   r   N)r   r)   r   r   r-   r1   rw   r{   r   r   rI   )r   r   rz   ry   s       r    r   z%WampWebSocketClientProtocol.onConnect   s     DLL$:$::// n u uIIdll445!7 8 8 !'%?@Q@Q%R"G]  99T\\%>%>}%MNr"   N)re   rf   rg   rh   r   r
   r   ro   r"   r    r   r      s     #'O"4 Or"   r   c                       e Zd ZdZddZy)WampWebSocketFactoryzF
    Base class for WAMP-over-WebSocket transport factory mixins.
    Nc                 8   t              r| _        n
fd| _        |g }	 ddlm} |j	                   |d             |j	                   |              	 ddlm} |j	                   |d             |j	                   |              	 ddlm} |j	                   |d             |j	                   |              	 dd	lm} |j	                   |d             |j	                   |              |st        d
      i | _
        |D ]  }|| j                  |j                  <    |D cg c]  }dj                  |j                         c}| _        y# t
        $ r Y w xY w# t
        $ r Y w xY w# t
        $ r Y w xY w# t
        $ r Y w xY wc c}w )a  

        :param factory: A callable that produces instances that implement
           :class:`autobahn.wamp.interfaces.ITransportHandler`
        :type factory: callable

        :param serializers: A list of WAMP serializers to use (or None for default
           serializers). Serializers must implement
           :class:`autobahn.wamp.interfaces.ISerializer`.
        :type serializers: list
        c                       S rd   ro   )r)   s   r    <lambda>z/WampWebSocketFactory.__init__.<locals>.<lambda>  s    Gr"   Nr   )CBORSerializerT)batched)MsgPackSerializer)UBJSONSerializer)JsonSerializerz$Could not import any WAMP serializerz	wamp.2.{})callabler*   autobahn.wamp.serializerr   appendImportErrorr   r   r   r-   r   SERIALIZER_IDr1   
_protocols)r   r)   serializersr   r   r   r   sers    `      r    __init__zWampWebSocketFactory.__init__   s    G#DM+DMKC"">$#?@"">#34
F""#4T#BC""#4#67
E""#3D#AB""#3#56
C"">$#?@"">#34  FGGC36Dc//0  MXXS;--c.?.?@XE         YsM   4E 4E* 4E9 4F /"F	E'&E'*	E65E69	FF	FFrd   )re   rf   rg   rh   r   ro   r"   r    r   r      s    ;Yr"   r   c                       e Zd ZdZy)r   zC
    Mixin for WAMP-over-WebSocket server transport factories.
    Nre   rf   rg   rh   ro   r"   r    r   r   5      r"   r   c                       e Zd ZdZy)r   zC
    Mixin for WAMP-over-WebSocket client transport factories.
    Nr   ro   r"   r    r   r   ;  r   r"   r   )#r   r/   typingr   r   r   autobahn.utilr   autobahn.websocketr   autobahn.websocket.typesr   r	   r
   autobahn.wamp.typesr   autobahn.wamp.interfacesr   r   autobahn.wamp.exceptionr   r   r   __all__objectr   registerrk   rj   r{   r   r   r   r   r   ro   r"   r    <module>r      s   6   ( (  ' Z Z 0 9 T T)}"F }"@ 
  ) *	C 	E(3-RU:V4W 	!"7 !:O"7 O2@Y6 @YF!5 !5 r"   