
    8'hz,                     
   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZ dZ G d d	e      Z e	j"                  e       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)    )absolute_importN)protocol)ConnectionDeny)
ITransport)ProtocolErrorSerializationErrorTransportLost)WampWebSocketServerProtocolWampWebSocketClientProtocolWampWebSocketServerFactoryWampWebSocketClientFactoryc                   F    e Zd ZdZdZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zy)WampWebSocketProtocolz>
    Base class for WAMP-over-WebSocket transport mixins.
    Nc                 d    | j                   j                  d||       | j                  ||       y )NzEFailing WAMP-over-WebSocket transport: code={code}, reason="{reason}")codereason)logdebug_fail_connection)selfr   r   s      S/var/www/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/wamp/websocket.py_bailoutzWampWebSocketProtocol._bailout2   s+    ^eirxydF+    c                 |   	 | 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_factory_sessiononOpen	Exceptionr   critical	traceback
format_excformatr   r   WebSocketProtocol CLOSE_STATUS_CODE_INTERNAL_ERROR)r   er   s      r   r#   zWampWebSocketProtocol.onOpen6   s    	f LL113DMMM  & 	fHHf)=)=)?@188;FMM(44UU^dMee	fs   := 	B;A+B66B;c                 ,   || _         | 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}")wasCleanr   r   r   r   )	_onclose_reasonr"   r   r   onCloser$   r%   r&   r'   )r   r-   r   r   s       r   r/   zWampWebSocketProtocol.onCloseD   s    
  &==$Ex  DL  SW  `f  g%%h/ !DM %  E!!&Y-A-A-C!DEs   :A 8BBc                    	 | j                   j                  ||      D ]d  }| j                  j                  d| j                  j
                  | j                  j                  |       | j                  j                  |       f 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`
        z@WAMP RECV: message={message}, session={session}, authid={authid}authidsessionmessager   r   zWAMP Protocol Error ({0})r   Nr   )_serializerunserializer   tracer"   _authid_session_id	onMessager   r%   r&   r'   r(   r   r   r)    CLOSE_STATUS_CODE_PROTOCOL_ERRORr$   r*   )r   payloadisBinarymsgr+   r   s         r   r:   zWampWebSocketProtocol.onMessageU   s1   	f''33GXF -V==00 MM55	   '',-  	fHHf)=)=)?@188;FMM(44UU^dMee 	fHHf)=)=)?@188;FMM(44UU^dMee	fs&   BB 	F A+C??F A+E;;F c                    | j                         ry	 | j                  j                  d| j                  j                  | j                  j
                  |       | 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`
        z@WAMP SEND: message={message}, session={session}, authid={authid}r1   z$WAMP message serialization error: {}z%WAMP message serialization error: {0}N)isOpenr   r7   r"   r8   r9   r5   	serializesendMessager$   errorr(   r   r	   )r   r>   r<   r=   r+   s        r   sendzWampWebSocketProtocol.sendm   s     ;;=4V==00 MM55	   %)$4$4$>$>s$C!   (3/!  ]ELLQOP()Q)X)XYZ)[\\]s   A%B 	C&AC!!C&c                     | j                   duS )zO
        Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen`
        N)r"   r   s    r   r@   zWampWebSocketProtocol.isOpen   s     }}D((r   c                     | j                         r*| j                  t        j                  j                         yt               )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.close`
        N)r@   	sendCloser   r)   CLOSE_STATUS_CODE_NORMALr	   rF   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)r@   r   r   r)   CLOSE_STATUS_CODE_GOING_AWAYr	   rF   s    r   abortzWampWebSocketProtocol.abort   s-     ;;=MM(44QQR/!r   N)__name__
__module____qualname____doc__r"   r   r#   r/   r:   rD   r@   rJ   rM    r   r   r   r   +   s8     H,f!"f0",)""r   r   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$   r(   intjoin)subprotocolsversionserializerIds       r   parseSubprotocolIdentifierr`      sv    d#Q47?ellmnopmqrssad)yy12'$$s   AA A"c                       e Zd ZdZdZd Zy)r
   z:
    Mixin for WAMP-over-WebSocket server transports.
    Tc                 $   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`
        rX   z1This server only speaks WebSocket subprotocols {}, jsonN)	protocolsr`   r    _serializerskeyscopyr5   STRICT_PROTOCOL_NEGOTIATIONr   BAD_REQUESTr(   r[   )r   requestheadersr\   r^   r_   s         r   	onConnectz%WampWebSocketServerProtocol.onConnect   s    ",, 	,K$>{$K!G\!|0I0I0N0N0P P $(99T\\-F-F|-T#U "G++	, ++ !;!;=q=x=xy~  zD  zD  EI  EQ  EQ  E[  E[  z\  >]  ^  ^  $yy)B)B7)KLD= r   NrO   rP   rQ   rR   rj   rn   rS   r   r   r
   r
      s     #'!r   r
   c                       e Zd ZdZdZd Zy)r   z:
    Mixin for WAMP-over-WebSocket client transports.
    Tc                 r   |j                   | j                  j                  vrL| j                  r=t	        dj                  dj                  | j                  j                                    d}nt        |j                         \  }}t        j                  | j                  j                  |         | _
        y)rc   zLThe server does not speak any of the WebSocket subprotocols {} we requested.rd   re   N)r   r    rf   rj   r$   r(   r[   r`   ri   rg   r5   )r   responser_   r^   s       r   rn   z%WampWebSocketClientProtocol.onConnect   s     DLL$:$::// o v vw|  xB  xB  CG  CO  CO  CY  CY  xZ  ![  \  \  '$>x?P?P$Q!G\  99T\\%>%>|%LMr   Nro   rS   r   r   r   r      s     #'N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 rN   rS   )r    s   r   <lambda>z/WampWebSocketFactory.__init__.<locals>.<lambda>   s    G r   Nr   )CBORSerializerT)batched)MsgPackSerializer)UBJSONSerializer)JsonSerializerz$Could not import any WAMP serializerz	wamp.2.{})callabler!   autobahn.wamp.serializerrx   appendImportErrorrz   r{   r|   r$   rg   SERIALIZER_IDr(   
_protocols)r   r    serializersrx   rz   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  GHH 	7C36Dc//0	7 NYYc<..s/@/@AYE         ZsM   4E 4E* 4E9 4F /"F	E'&E'*	E65E69	FF	FFrN   )rO   rP   rQ   rR   r   rS   r   r   rt   rt      s    ;Zr   rt   c                       e Zd ZdZy)r   zC
    Mixin for WAMP-over-WebSocket server transport factories.
    NrO   rP   rQ   rR   rS   r   r   r   r   #      r   r   c                       e Zd ZdZy)r   zC
    Mixin for WAMP-over-WebSocket client transport factories.
    Nr   rS   r   r   r   r   )  r   r   r   )
__future__r   ri   r&   autobahn.websocketr   autobahn.websocket.typesr   autobahn.wamp.interfacesr   autobahn.wamp.exceptionr   r   r	   __all__objectr   registerr`   r
   r   rt   r   r   rS   r   r   <module>r      s   6 '   ' 3 / T T)n"F n"b 
  ) *	!"7 !:N"7 N0@Z6 @ZF!5 !5 r   