o
    í´j–  ã                   @   s¼   d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ e e¡ZeeƒjZG dd„ deƒZd	d
„ Zdd„ Zedkr\ejejd� ede
› d�ƒ eƒ  dS dS )uÛ   
HTTP-Ñ�ÐµÑ€Ð²ÐµÑ€ Ð´Ð»Ñ� Ñ�Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ñ… Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð¸Ð³Ñ€Ñ‹ Ð¸ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð².
Ð˜Ñ�Ð¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ�Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½ÑƒÑŽ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÑƒ Python (http.server).
é    N)Ú
HTTPServerÚSimpleHTTPRequestHandler)ÚPath)ÚSERVER_PORT)Úsave_score_syncÚinit_db_syncc                       sD   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Z‡ fdd	„Zd
d„ Z‡  Z	S )ÚCORSHandleru^   SimpleHTTPRequestHandler Ñ� CORS-Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°Ð¼Ð¸, Ñ€Ð°Ð·Ð´Ð°Ñ‡ÐµÐ¹ Ñ„Ð°Ð¹Ð»Ð¾Ð² Ð¸ API.c                    s   t ƒ j|dttƒi|¤Ž d S )NÚ	directory)ÚsuperÚ__init__ÚstrÚGAME_DIR)ÚselfÚargsÚkwargs©Ú	__class__© ú+/home/ubuntu/bots/monkey jump bot/server.pyr      s   zCORSHandler.__init__c                 C   s:   |   d¡ |  dd¡ |  dd¡ |  dd¡ |  ¡  dS )	u3   ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° CORS preflight Ð·Ð°Ð¿Ñ€Ð¾Ñ�Ð¾Ð².éÈ   úAccess-Control-Allow-OriginÚ*úAccess-Control-Allow-MethodsúGET, POST, OPTIONSúAccess-Control-Allow-HeadersúContent-TypeN)Úsend_responseÚsend_headerÚend_headers©r   r   r   r   Ú
do_OPTIONS   s
   
zCORSHandler.do_OPTIONSc              
   C   s–  | j  d¡rÃzwt| j dd¡ƒ}| j |¡ d¡}t 	|¡}t| d¡ƒ}t
| dd¡p-dƒ}t
| dd¡p7dƒ}t| d	d¡ƒ}t||||ƒ t d
||||¡ t dddœ¡ d¡}|  d¡ |  dd¡ |  dt
t|ƒƒ¡ |  ¡  | j |¡ W dS  tyÂ }	 z9t d|	¡ t dt
|	ƒdœ¡ d¡}
|  d¡ |  dd¡ |  dt
t|
ƒƒ¡ |  ¡  | j |
¡ W Y d}	~	dS d}	~	ww |  dd¡ dS )uP   ÐžÐ±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° POST Ð·Ð°Ð¿Ñ€Ð¾Ñ�Ð¾Ð² Ð´Ð»Ñ� Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ� Ð¾Ñ‡ÐºÐ¾Ð².z/api/save_scorezContent-Lengthr   zutf-8Úuser_idÚusernameÚ Ú
first_nameÚscoreuN   Ð¡Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½ Ñ€ÐµÐºÐ¾Ñ€Ð´ Ð¸Ð³Ñ€Ð¾ÐºÐ° user_id=%s (@%s, %s): %s Ð¾Ñ‡ÐºÐ¾Ð²T)ÚokÚsavedr   r   zapplication/json; charset=utf-8u7   ÐžÑˆÐ¸Ð±ÐºÐ° Ð¿Ñ€Ð¸ Ñ�Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ð¸ Ð¾Ñ‡ÐºÐ¾Ð²: %sF)r&   Úerrori�  Ni”  z	Not Found)ÚpathÚ
startswithÚintÚheadersÚgetÚrfileÚreadÚdecodeÚjsonÚloadsr   r   ÚloggerÚinfoÚdumpsÚencoder   r   Úlenr   ÚwfileÚwriteÚ	Exceptionr(   Ú
send_error)r   Úcontent_lengthÚ	post_bodyÚdatar!   r"   r$   r%   Úresponse_bytesÚeÚ	err_bytesr   r   r   Údo_POST!   s>   
þ

€ù	zCORSHandler.do_POSTc                    sV   |   dd¡ |   dd¡ |   dd¡ |   dd¡ |   d	d
¡ |   dd¡ tƒ  ¡  d S )Nr   r   r   r   r   r   zCache-Controlz.no-cache, no-store, must-revalidate, max-age=0ÚPragmazno-cacheÚExpiresÚ0)r   r
   r   r   r   r   r   r   E   s   zCORSHandler.end_headersc                 G   s   t j|g|¢R Ž  d S )N)r3   r4   )r   Úfmtr   r   r   r   Úlog_messageO   s   zCORSHandler.log_message)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    rB   r   rG   Ú__classcell__r   r   r   r   r      s    $
r   c                  C   s.   t ƒ  tdtftƒ} t dtt¡ |  ¡  dS )ui   Ð—Ð°Ð¿ÑƒÑ�ÐºÐ°ÐµÑ‚ HTTP-Ñ�ÐµÑ€Ð²ÐµÑ€ Ð² Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾Ð¼ Ð¿Ð¾Ñ‚Ð¾ÐºÐµ (Ð´Ð»Ñ� Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ð·Ð° Nginx).z0.0.0.0uj   Ð¡Ñ‚Ð°Ñ‚Ð¸Ñ‡ÐµÑ�ÐºÐ¸Ð¹ Ñ�ÐµÑ€Ð²ÐµÑ€ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½ Ð½Ð° Ð¿Ð¾Ñ€Ñ‚Ñƒ %s: http://127.0.0.1:%s/game/index.htmlN)r   r   r   r   r3   r4   Úserve_forever)Úhttpdr   r   r   Ú_run_http_serverT   s   rO   c                  C   s$   t jtdd�} |  ¡  t d¡ | S )uD   Ð—Ð°Ð¿ÑƒÑ�ÐºÐ°ÐµÑ‚ HTTP-Ñ�ÐµÑ€Ð²ÐµÑ€ Ð² Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð¼ Ð¿Ð¾Ñ‚Ð¾ÐºÐµ.T)ÚtargetÚdaemonu:   Ð¡ÐµÑ€Ð²ÐµÑ€ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½ Ð² Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð¼ Ð¿Ð¾Ñ‚Ð¾ÐºÐµ)Ú	threadingÚThreadrO   Ústartr3   r4   )Úthreadr   r   r   Ú
run_server\   s   
rV   Ú__main__)Úlevelu   Ð¡ÐµÑ€Ð²ÐµÑ€: http://localhost:z/game/index.html)rK   r1   ÚloggingrR   Úhttp.serverr   r   Úpathlibr   Úconfigr   Údbr   r   Ú	getLoggerrH   r3   Ú__file__Úparentr   r   rO   rV   ÚbasicConfigÚINFOÚprintr   r   r   r   Ú<module>   s$    

A
ý