
    Ri                         d Z ddlZ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mZmZmZmZmZmZmZmZ ddlmZ ddlmZ  ej2                  e      Z e       Zej;                  d      d	ed
efd       Zy)u/   
游戏 WebSocket —— 房间内实时通信
    N)	APIRouter	WebSocketWebSocketDisconnect)decode_access_token)	room_managerinit_game_stateupdate_player_position	broadcast	game_loopget_game_stateprocess_attackprocess_skilllist_heroes)update_player_facing)
RoomStatusz/ws/game/{room_id}wsroom_idc           
        K   d}d}	 | j                          d{    | j                          d{   }t        j                  |      }|j	                  d      dk7  r| j                  dd       d{    	 |r|r||j                  v r|d|j                  |   _        |j                  t        j                  k(  rJt        j                  ||       t        |d|j                  r|j                         ni d       d{    yyyyyt        |j	                  d	d
            }|s| j                  dd       d{    	 |r|r||j                  v r|d|j                  |   _        |j                  t        j                  k(  rJt        j                  ||       t        |d|j                  r|j                         ni d       d{    yyyyy|d   }t        j                   |      }|r||j                  vr| j                  dd       d{    	 |r|r||j                  v r|d|j                  |   _        |j                  t        j                  k(  rJt        j                  ||       t        |d|j                  r|j                         ni d       d{    yyyyy| |j                  |   _        | j#                  t        j$                  d|j                         t'               d             d{    t        |d|j                         d       d{    	 | j                          d{   }t        j                  |      }|j	                  d      }	|	dk(  r||j(                  k(  rx|j                  t        j                  k(  r|j+                         dk\  rt-        |       t        |ddi       d{    t/        j0                  t3        |            |_        n?|	dk(  rp|j                  t        j                  k(  rS|j	                  dd
      }
t        j6                  |||
      }|rt        |d|j                         d       d{    n|	dk(  ry|j                  t        j8                  k(  r\t;        dt=        d|j	                  dd                  }t;        dt=        d|j	                  dd                  }t?        ||||       nL|	d k(  rG|j                  t        j8                  k(  r*tA        |j	                  d!d            }tC        |||       n |	d"k(  rb|j                  t        j8                  k(  rEtA        |j	                  d#d            }tA        |j	                  d$d            }tE        ||||       n|	d%k(  r|j                  t        j8                  k(  rw|j	                  d&d
      }|d'v ratA        |j	                  d#d            }tA        |j	                  d$d            }tA        |j	                  d!d            }tG        ||||||       7 7 
7 7 ?7 7 {7 47 7 N7 ,7 7 7 # tH        $ r Y n/tJ        $ r$}tL        jO                  d(| d)       Y d}~nd}~ww xY w|r|r||j                  v r}d|j                  |   _        |j                  t        j                  k(  rKt        j                  ||       t        |d|j                  r|j                         ni d       d{  7   yyyyy# |r|r||j                  v r}d|j                  |   _        |j                  t        j                  k(  rKt        j                  ||       t        |d|j                  r|j                         ni d       d{  7   w w w w w xY ww)*uc  
    游戏房间 WebSocket
    连接后第一条消息发送: {"type":"auth","token":"xxx"}
    之后:
      {"type":"move","dx":1,"dy":0}
      {"type":"facing","angle":1.57}
      {"type":"start"}
      {"type":"select_hero","hero_id":"red_lady"}
      {"type":"attack"}
      {"type":"skill","key":"f","target_x":2000,"target_y":1500,"angle":0}
    Ntypeauthi  u   首条消息需为认证信息)codereasonplayer_left)r   datatoken i  u   Token 无效subi  u   不在该房间中	room_info)r   r   heroesplayer_joinedTstart   
game_startselect_herohero_idhero_selectedmove   dxr   dyfacingangleattacktarget_xtarget_yskillkey)ferzGame WS error: )exc_info)(acceptreceive_textjsonloadsgetcloseplayersr   statusr   WAITINGr   
leave_roomr
   to_dictr   get_room	send_textdumpsr   host_idplayer_countr   asynciocreate_taskr   	game_taskr$   PLAYINGmaxminr	   floatr   r   r   r   	Exceptionloggererror)r   r   user_idroomauth_msg	auth_datapayloadrawr   msg_typer%   okr*   r+   r-   atxatyr2   txtyr4   s                        M/mnt/c/Users/DipsyHou/Desktop/workspace/TheGreatWar/server/app/routes/game.pygame_wsr^      s     GD]iik **JJx(	== F*((-M(NNN\ G4<< 7'+DLL!${{j000''9).2llDLLN'    1 !8G4Y &immGR&@A((^(<<<R G4<< 7'+DLL!${{j000''9).2llDLLN'    1 !8G4O %.$$W-wdll2((-A(BBBD G4<< 7'+DLL!${{j000''9).2llDLLN'    1 !8G4 $&W  ll4::LLN!m'
   	 	 #LLN
  	 	 ))C::c?Dxx'H7"w$,,'>;;*"4"449J9J9LPQ9Q#D)#D6<*@AAA%,%8%84%IDN]*t{{j>P>P/P((9b1!--gwH#D / $+   
 V#z7I7I(ISDHHT1$567SDHHT1$567&tWb"=X%$++9K9K*Kdhhw23$T7E:X%$++9K9K*KDHHZ34DHHZ34tWc37W$
8J8J)Jhhub)/)txx
A67Btxx
A67B!$((7A"67E!$b"eDQ M 	 + Of] =\O CNA		 * B6   ;qc*T::; G4<< 7'+DLL!${{j000''9).2llDLLN'    1 !8G44G4<< 7'+DLL!${{j000''9).2llDLLN'    1 !8G4sm  _Y! X:Y! X=AY! 7Y 8Y! =B_Y	_3Y! YY! B_Y		_A Y! YY! B_%Y&	_/AY! Y$Y! )Y*Y! YBY! YBY! 'Y(GY! =Y!  Y! _Y! 	_Y! _Y! Y! Y! Y! Y! !	Z*\- ,Z4Z\- Z\- B_"\%#
_-B_ 5^86
_  _) __doc__rG   r9   loggingmathfastapir   r   r   app.authr   app.gamer   r   r	   r
   r   r   r   r   r   app.game.logicr   app.game.room_managerr   	getLogger__name__rO   router	websocketstrr^        r]   <module>rn      s        = = (  
 0 ,			8	$	 &'li l# l (lrm   