o
    ;i=                     @   s  U d dl mZmZmZ d dlmZmZmZ d dlZd dl	Z	d dl
Z
d dlZe Zee ed< i Zeeee f ed< e Ze Zee ed< daeej ed< ddhZd	hZd
ZdZddhZeddd Zeddd ZdedefddZi ZdedefddZdddedefddZ d ede!fd!d"Z"d edefd#d$Z#d ed%efd&d'Z$e%d(defd)d*Z&defd+d,Z'e(d-d.e)fd/d0Z*dS )1    )FastAPI	WebSocketWebSocketDisconnect)SetOptionalDictNclientsemail_clientsdb_poolzhttps://b52-9979.onlinez https://football.b52-9979.onlinexx      truc_ntdangstartupc                
      s.   t jdddddddddI d H atd	 d S )
Nz	127.0.0.1i  r   b52Tr      )hostportuserpassworddb
autocommitminsizemaxsizez? DB pool created)aiomysqlcreate_poolr
   print r   r   8/var/www/html/football.b52-9979.online/server_fastapi.pystartup_event   s   
r    shutdownc                      s4   t d urt   t  I d H  d a td d S d S )Nz? DB pool closed)r
   closewait_closedr   r   r   r   r   shutdown_event+   s   r$   session_tokenreturnc              
      s   t d u r	tdt  4 I d H K}|tj4 I d H *}|d| fI d H  | I d H }|d uW  d   I d H  W  d   I d H  S 1 I d H sLw   Y  W d   I d H  d S 1 I d H sbw   Y  d S )NzDB pool not initializedz4SELECT 1 FROM users WHERE session_token = %s LIMIT 1)r
   RuntimeErroracquirecursorr   
DictCursorexecutefetchone)r%   conncurrowr   r   r   session_exists4   s   
.r0   wsdatac                    s.   z|  |I d H  W d S  ty   Y d S w N)	send_text	Exception)r1   r2   r   r   r   	send_safeD   s   r6   )excluder7   c                   sX   g }t tD ]}|d ur||u rq|t||  q|r*tj|ddiI d H  d S d S )Nreturn_exceptionsT)listr   appendr6   asynciogather)r2   r7   taskscr   r   r   broadcast_safeJ   s   r?   emailc                 C   s   | t v rtS tS r3   )ADMIN_EMAILS	ADMIN_MAXUSER_MAXr@   r   r   r   max_sessionsS   s   rE   c                 C   s   | pd   tv S )N )striplowerNO_KICK_EMAILSrD   r   r   r   
is_no_kickV   s   rJ   new_wsc              	      s   t | }|s
d S || t| }t||k rd S t||d  }t|d | }tjd|dkr4dnd| t dddd}|D ])}t	||I d H  z|j
d	d
I d H  W n	 ty`   Y nw t| || qB|svt | d  d S d S )Nr   kickanother_session_connectedtoo_many_sessions)typereasonr@   tsF,:ensure_ascii
separators  code)r	   getdiscardrE   lenr9   jsondumpstimer6   r"   r5   r   pop)r@   rK   ws_setlimit	need_kickto_kickpayloadold_wsr   r   r   kick_oldY   s<   


rh   z/banh/wsc           	   
      s@  |   I d H  | jd}|tvr| jddI d H  d S | jd}| jd}|d u s1|d u r<| jddI d H  d S |dkrRt|I d H sR| jddI d H  d S t|s^t|| I d H  t	
|t |  t|  zztt| }	 |  I d H }zt|}W n tjy   t| tjdd	|d
ddI d H  Y qvw t|tst| tjdd|d
ddI d H  qv|d}|dkrtjd|ddddd}t| |I d H  t|I d H  |dkrtjd|ddddd}t| |I d H  t|I d H  qw ty	   Y nw W t|  |  d S t|  |  w )NoriginrX   rY   tokenr@   danimhdmaetTerrorinvalid_json)rO   rl   rawF)rV   json_not_objectrO   getdatamatchesr2   )rO   r2   rR   rU   getdatatestmatches_test)acceptheadersr[   ALLOWED_ORIGINSr"   query_paramsr0   rJ   rh   r	   
setdefaultsetaddr   r;   create_tasktickerreceive_textr^   loadsJSONDecodeErrorr6   r_   
isinstancedictr?   r   r\   cancel)	r1   ri   rj   r@   	tick_taskmsgobjmsg_typetextr   r   r   ws_endpoint   s   


&


r   c                    s>   d}	 t | td|dI d H  |d7 }tdI d H  q)Nr   Tping)rO   nr      )r6   r^   r_   r;   sleep)r1   ir   r   r   r|      s   r|   z
/broadcastrf   c                    sB   t d| d tj fddttD  I d H  dttdS )N	broadcast)rO   rf   c                 3   s    | ]}t | V  qd S r3   )r6   ).0r>   r2   r   r   	<genexpr>   s    z!http_broadcast.<locals>.<genexpr>T)oksent_to)r^   r_   r;   r<   r9   r   r]   )rf   r   r   r   http_broadcast   s   "r   )+fastapir   r   r   typingr   r   r   r;   r^   r`   r   ry   r   __annotations__r	   strappr
   Poolrv   rA   rB   rC   rI   on_eventr    r$   boolr0   r2   r6   r?   intrE   rJ   rh   	websocketr   r|   postr   r   r   r   r   r   <module>   sD    

	'E