
    oWiT                        U d dl Z 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  ej        e          Z edg          Zg Zee         ed<   g Zee         ed	<   d
ee         defdZe                    d          defd            Ze                    d          defd            ZdefdZdedefdZdS )    N)	APIRouter	WebSocketWebSocketDisconnect)select)AsyncSessionLocal)TradeTradeStatus
websockets)tags_trade_connections_signal_connectionsconnectionspayloadc                    K   g }t          j        |          }| D ]C}	 |                    |           d{V  # t          $ r |                    |           Y @w xY w|D ]}|                     |           dS )zDSend JSON payload to all connected clients; remove dead connections.N)jsondumps	send_text	Exceptionappendremove)r   r   deadmessagewss        6/var/www/html/crypto-bot/backend/app/api/websockets.py
_broadcastr      s      Dj!!G  	,,w'''''''''' 	 	 	KKOOOOO	  2 s   :AAz
/ws/trades	websocketc                   K   |                                   d{V  t                              |            t                              d           	 	 t          j        d           d{V  t                      4 d{V }|                    t          t                                        t          j        t          j        k                         d{V }|                                                                }dd |D             d}ddd          d{V  n# 1 d{V swxY w Y   |                     t%          j        |                     d{V  # t(          $ r8 t                              |            t                              d           Y dS t,          $ rQ}t                              d	|            | t          v r t                              |            Y d}~dS Y d}~dS d}~ww xY w)
zh
    Broadcasts all open trades every 5 seconds.
    Clients receive a JSON array of trade objects.
    NzWS /ws/trades client connectedT   trades_updatec                 6    g | ]}|                                 S  )to_dict).0ts     r   
<listcomp>zws_trades.<locals>.<listcomp>3   s     999QQYY[[999    typedataz!WS /ws/trades client disconnectedzWS /ws/trades error: )acceptr   r   loggerinfoasynciosleepr   executer   r   wherestatusr	   OPENscalarsallr   r   r   r   r   r   error)r   dbresulttradesr   es         r   	ws_tradesr:       s      



i(((
KK01111	;-"""""""""(**       b!zz5MM''8H(HII           ))--//+99&999                            %%dj&9&9:::::::::	;  9 9 9!!),,,7888888 1 1 10Q00111***%%i000000000 +*****1sD   /E! BD!E! !
D++E! .D+/2E! !>G<"	G<+A G77G<z/ws/signalsc                 v  K   |                                   d{V  t                              |            t                              d           	 	 t          j        d           d{V  |                     t          j	        ddi                     d{V  J# t          $ r8 t                              |            t                              d           Y dS t          $ rQ}t                              d|            | t          v r t                              |            Y d}~dS Y d}~dS d}~ww xY w)	zS
    Keeps the connection open; new signals are pushed via broadcast_signal().
    NzWS /ws/signals client connectedT<   r(   pingz"WS /ws/signals client disconnectedzWS /ws/signals error: )r*   r   r   r+   r,   r-   r.   r   r   r   r   r   r   r5   )r   r9   s     r   
ws_signalsr>   ?   s     
 



y)))
KK12222	D-#########%%dj&&1A&B&BCCCCCCCCC	D  : : :""9---8999999 2 2 21a11222+++&&y111111111 ,+++++2s    AB >D8	D8'A D33D8signal_payloadc                 F   K   t          t          d| d           d{V  dS )z1Called externally when a new signal is generated.
new_signalr'   N)r   r   )r?   s    r   broadcast_signalrB   U   s7      
(<*X*X
Y
YYYYYYYYYYr&   event
trade_datac                 F   K   t          t          | |d           d{V  dS )zSPush a specific trade event (opened/closed/sl_hit/tp_hit) to all trade subscribers.r'   N)r   r   )rC   rD   s     r   broadcast_trade_eventrF   Z   s7      
'%)L)L
M
MMMMMMMMMMr&   )r-   r   loggingfastapir   r   r   
sqlalchemyr   app.databaser   app.models.trader   r	   	getLogger__name__r+   routerr   list__annotations__r   dictr   r   r:   r>   rB   strrF   r!   r&   r   <module>rS      s      = = = = = = = = = =       * * * * * * / / / / / / / /		8	$	$		'	'	' ') DO ( ( (') T)_ ) ) )
$y/ 
D 
 
 
 
 ,1y 1 1 1  1< -  2	 2 2 2 ! 2*Z4 Z Z Z Z
Ns N N N N N N Nr&   