o
    g                     @   sT   d dl mZmZmZ d dlmZ ddlmZ d dlmZ d dl	Z	dd Z
d	d
 ZdS )    )emit	join_room
leave_room)request   )rooms)datetimeNc                 C   s   |  ddd }|  ddd }|  ddd	 }|  d
dd }|  ddd }|  ddd }|  ddd }|  ddd }|  ddd }	|  ddd }
d S )Nget_room_listc                  S   s&   dd t  D } td| tjd d S )Nc                 S   s.   g | ]\}}|t |d  |d ddqS )players
created_atz%Y-%m-%d %H:%M:%S)room_idr
   r   )lenstrftime).0r   data r   //var/www/html/proxy_test/modules/omok_routes.py
<listcomp>   s    
z?register_omok_events.<locals>.get_room_list.<locals>.<listcomp>	room_listroom)r   itemsr   r   sid)r   r   r   r   r	   	   s   z+register_omok_events.<locals>.get_room_listjoinc                 S   sL  | d }|  d}|  dd|d d  }tj}|tvr2t dd tdD i i d	|d
dt|< t| }t| ||d v rI||d | d< n-t|d dk rmd	dd |d 	 D vr`d	nd}|||d|d |< n	||d|d |< dd |d 	 D }t
d|d ||d  |i  dd|d d|d t
dd|i|d d S )Nr   uuidnicknameUser   c                 S      g | ]}d gd qS r      r   r   _r   r   r   r   !       z9register_omok_events.<locals>.on_join.<locals>.<listcomp>r    r   F)r   boardr
   
spectatorsturn
owner_uuid
game_endedr
   r      c                 S   s   g | ]}|d  qS )playerr   r   pr   r   r   r   0   s    )r   r   r*   )r   r   r%   c                 S   s0   g | ]}|d   d|d dkrdnd dqS )r   z (r*   r   u   흑u   백)r   r+   r   r   r   r   :   s    "joinedr$   r*   r   r&   )r$   r
   your_playerr&   r   update_players)getr   r   r   r   nowranger   r   valuesr   )r   r   r   r   r   	room_dataassignedplayers_listr   r   r   on_join   sH   


"
z%register_omok_events.<locals>.on_joinmovec                    s  | d }| d | d }}t j t|}|r|d rd S t fdd|d  D d }|s1d S |d | d }||d	 krAd S |d
 | | dkr~||d
 | |< d| |d	< td|||d|d t|d
 |||rd|d< td|||d|d d S d S d S )Nr   xyr(   c                 3   $    | ]\}}|d   kr|V  qdS r   Nr   r   uidr,   r   r   r   	<genexpr>Q      " z8register_omok_events.<locals>.on_move.<locals>.<genexpr>r
   r*   r&   r$   r      update)r:   r;   r*   r   T	game_over)winnerr:   r;   )r   r   r   r1   nextr   r   	check_win)r   r   r:   r;   r5   r   
player_numr   r@   r   on_moveG   s*   
 z%register_omok_events.<locals>.on_move	surrenderc                    s   | d }t j t|}|sd S t fdd|d  D d }|s$d S |d | d }d| }d|d< td	|dd
|d d S )Nr   c                 3   r<   r=   r   r>   r@   r   r   rA   k   rB   z=register_omok_events.<locals>.on_surrender.<locals>.<genexpr>r
   r*   rC   Tr(   rE   )rF   rK   r   )r   r   r   r1   rG   r   r   )r   r   r5   r   loserrF   r   r@   r   on_surrenderd   s   
 z*register_omok_events.<locals>.on_surrenderrematch_requestc                 S   sZ   | d }t j}t| d  D ]}|d |kr!tdi |d d qtdi |d d qd S )Nr   r
   r   rematch_confirmr   rematch_waiting)r   r   r   r4   r   )r   r   r   r*   r   r   r   rN   t   s   z-register_omok_events.<locals>.rematch_requestrematch_acceptc                 S   sd   | d }|t v r0dd tdD t | d< dt | d< dt | d	< td
dt | d i|d d S d S )Nr   c                 S   r   r   r   r!   r   r   r   r      r#   z@register_omok_events.<locals>.rematch_accept.<locals>.<listcomp>r    r$   r   r&   Fr(   reset_boardr   r   r3   r   r   r   r   r   r   rQ   ~   s   z,register_omok_events.<locals>.rematch_acceptrematch_declinec                 S   s   | d }t di |d d S )Nr   rematch_deniedr   )r   rT   r   r   r   rU      s   z-register_omok_events.<locals>.rematch_declinerequest_resetc                 S   sh   | d }t j}t|}|sd S |d  D ]}|d |kr(tdi |d d qtdi |d d qd S )Nr   r
   r   confirm_resetr   reset_requested)r   r   r   r1   r4   r   )r   r   senderr5   r*   r   r   r   rW      s   
z+register_omok_events.<locals>.request_resetaccept_resetc                 S   sX   | d }|t v r*dd tdD t | d< dt | d< tddt | d i|d	 d S d S )
Nr   c                 S   r   r   r   r!   r   r   r   r      r#   z>register_omok_events.<locals>.accept_reset.<locals>.<listcomp>r    r$   r   r&   rR   r   rS   rT   r   r   r   r[      s   z*register_omok_events.<locals>.accept_reset
disconnectc                  S   s   t j} tt D ]=\}}d}dD ]"}t||  D ]\}}|d | kr.|| |= d} nq|r3 nq|d sF|d rFtdi |d t|= q	d S )	NF)r
   r%   r   Tr
   r'   room_closedr   )r   r   listr   r   r   )r   r   r   foundgroupr   userr   r   r   on_disconnect   s$   
z+register_omok_events.<locals>.on_disconnect)on)socketior	   r8   rJ   rM   rN   rQ   rU   rW   r[   rb   r   r   r   register_omok_events   s(   

0


	



re   c           
      C   s   dD ]K\}}d}dD ];}||}}		 ||| 7 }|	|| 7 }	d|  kr(dk rCn nd|	  kr4dk rCn n| |	 | |krC|d7 }nnqq
|dkrM dS qdS )	N))r   r   )r   r   )r   r   r   r   rf   Tr   r       Fr   )
r$   r:   r;   r*   dxdycountdirnxnyr   r   r   rH      s    
@
rH   )flask_socketior   r   r   flaskr   
omok_stater   r   randomre   rH   r   r   r   r   <module>   s     1