
    Bգi                        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j        e          Z e            Ze                    d          d	ed
efd            ZdS )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}	 |                                   d{V  |                                  d{V }t          j        |          }|                    d          dk    r|                     dd           d{V  	 |r}|r}||j        v rvd|j        |         _        |j        t          j
        k    rQt          j        ||           t          |d|j        r|                                ni d           d{V  dS dS dS dS dS t          |                    d	d
                    }|s|                     dd           d{V  	 |r}|r}||j        v rvd|j        |         _        |j        t          j
        k    rQt          j        ||           t          |d|j        r|                                ni d           d{V  dS dS dS dS dS |d         }t          j        |          }|r	||j        vr|                     dd           d{V  	 |r}|r}||j        v rvd|j        |         _        |j        t          j
        k    rQt          j        ||           t          |d|j        r|                                ni d           d{V  dS dS dS dS dS | |j        |         _        |                     t          j        d|                                t'                      d                     d{V  t          |d|                                d           d{V  	 |                                  d{V }t          j        |          }|                    d          }	|	dk    r||j        k    r||j        t          j
        k    re|                                dk    rMt-          |           t          |ddi           d{V  t/          j        t3          |                    |_        n|	dk    rp|j        t          j
        k    r[|                    dd
          }
t          j        |||
          }|r+t          |d|                                d           d{V  n
|	dk    r|j        t          j        k    rxt;          dt=          d|                    dd                              }t;          dt=          d|                    dd                              }t?          ||||           nw|	d k    rK|j        t          j        k    r6tA          |                    d!d                    }tC          |||           n&|	d"k    rn|j        t          j        k    rYtA          |                    d#d                    }tA          |                    d$d                    }tE          ||||           n|	d%k    r|j        t          j        k    r|                    d&d
          }|d'v r}tA          |                    d#d                    }tA          |                    d$d                    }tA          |                    d!d                    }tG          ||||||           R# tH          $ r Y n5tJ          $ r)}tL          '                    d(| d)           Y d}~nd}~ww xY w|r}|r}||j        v rvd|j        |         _        |j        t          j
        k    rQt          j        ||           t          |d|j        r|                                ni d           d{V  dS dS dS dS dS # |r||r{||j        v rsd|j        |         _        |j        t          j
        k    rMt          j        ||           t          |d|j        r|                                ni d           d{V  w w w w w xY 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                        5/root/workspace/TheGreatWar/server/app/routes/game.pygame_wsr^      s	      GD]iikk ********Jx((	==  F**((-M(NNNNNNNNN\  	G 	4< 7 7'+DL!${j000'999).2lBDLLNNN' '           		 	 	 	 7 700] &immGR&@&@AA 	((^(<<<<<<<<<R  	G 	4< 7 7'+DL!${j000'999).2lBDLLNNN' '           		 	 	 	 7 700S %.$W-- 	wdl22((-A(BBBBBBBBBD  	G 	4< 7 7'+DL!${j000'999).2lBDLLNNN' '           		 	 	 	 7 700C $&W  ll4:LLNN!mm'
 '
     	 	 	 	 	 	 	 #LLNN
 
   	 	 	 	 	 	 	(	E))))))))C:c??Dxx''H7""w$,'>'>;*"4449J9J9L9LPQ9Q9Q#D)))#D6<*@AAAAAAAAA%,%84%I%IDN]**t{j>P/P/P((9b11!-gwHH #D / $+ +         
 V##z7I(I(ISDHHT1$5$56677SDHHT1$5$56677&tWb"====X%%$+9K*K*Kdhhw2233$T7E::::X%%$+9K*K*KDHHZ3344DHHZ3344tWc37777W$$
8J)J)Jhhub))/))txx
A6677Btxx
A6677B!$((7A"6"677E!$b"eDDDQ(	ET     ; ; ;*q**T::::::::;  	G 	4< 7 7'+DL!${j000'999).2lBDLLNNN' '           		 	 	 	 7 700  	G 	4< 7 7'+DL!${j000'999).2lBDLLNNN' '          		 	 70sL   A>Z AZ AZ $OZ 
[] 	[Z<7] <[] B_) __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      sf        = = = = = = = = = = ( ( ( ( ( (                     
 0 / / / / / , , , , , ,		8	$	$	 &''li l# l l l ('l l lrm   