o
    j
                     @   s<   d Z ddlZddlZddlZG dd dZG dd dZdS )uE   
V11 — Feeds: Binance (precio spot) y CLOB (orderbook Polymarket).
    Nc                   @   s*   e Zd ZdefddZdd Zdd ZdS )	BinanceFeedws_urlc                 C   s   || _ d| _d | _d| _d S Ng        F)r   last_px_ws_stop)selfr    r	   -/var/www/html/MetaHedge/POLYBOT1/v12/feeds.py__init__   s   
zBinanceFeed.__init__c              
      s    fdd}d} j sNztj j|d _ jjddd d}W n ty9 } ztd|  W Y d }~nd }~ww  j sIt	| t
|d d	} j rd S d S )
Nc                    s0   zt t|d  _W d S  ty   Y d S w )Np)floatjsonloadsr   	Exception)wsmsgr   r	   r
   on_msg   s
   zBinanceFeed.run.<locals>.on_msg   )
on_message   
   ping_intervalping_timeoutz[binance] ws error: <   )r   	websocketWebSocketAppr   r   run_foreverr   printtimesleepmin)r   r   backoffer	   r   r
   run   s   
zBinanceFeed.runc                 C   ,   d| _ z| j  W d S  ty   Y d S w NTr   r   closer   r   r	   r	   r
   stop       zBinanceFeed.stopN)__name__
__module____qualname__strr   r&   r+   r	   r	   r	   r
   r      s    r   c                   @   sB   e Zd ZdZdedefddZdd Zdd	 Zd
d Zdd Z	dS )CLOBFeedz:Tracks best bid/ask for a single token via CLOB websocket.token_idr   c                 C   s(   || _ || _d| _d| _d | _d| _d S r   )r2   r   best_bidbest_askr   r   )r   r2   r   r	   r	   r
   r   +   s   
zCLOBFeed.__init__c                 C   s   | td| jgd d S )Nmarket)type
assets_ids)sendr   dumpsr2   )r   r   r	   r	   r
   _on_open3   s   zCLOBFeed._on_openc                 C   s   zFt |}t|tr|n|g}|D ]1}|ddksd|v rC|dg }|dg }|r7tdd |D | _|rCtdd |D | _qW d S  t	yP   Y d S w )N
event_typebookbidsasksc                 s       | ]	}t |d  V  qdS priceNr   .0xr	   r	   r
   	<genexpr>?       z#CLOBFeed._on_msg.<locals>.<genexpr>c                 s   r?   r@   rB   rC   r	   r	   r
   rF   A   rG   )
r   r   
isinstancelistgetmaxr3   r#   r4   r   )r   r   r   ititemsibar	   r	   r
   _on_msg6   s    
zCLOBFeed._on_msgc              
   C   s   d}| j sSztj| j| j| jd| _| jjddd d}W n! ty> } zt	d| j
d d  d|  W Y d }~nd }~ww | j sNt| t|d d	}| j rd S d S )
Nr   )on_openr   r   r   r   z[clob:   z] reconnect: r   )r   r   r   r   r:   rQ   r   r   r   r    r2   r!   r"   r#   )r   r$   r%   r	   r	   r
   r&   E   s    *
zCLOBFeed.runc                 C   r'   r(   r)   r   r	   r	   r
   r+   S   r,   zCLOBFeed.stopN)
r-   r.   r/   __doc__r0   r   r:   rQ   r&   r+   r	   r	   r	   r
   r1   (   s    r1   )rT   r   r!   r   r   r1   r	   r	   r	   r
   <module>   s    !