
    S
h                         d dl Z d dlZd dlm Z d dlmZ d dlmZ d dlm	Z	 d dl
mZ ddlmZmZmZmZmZmZmZ d Zd	 Z G d
 d          Z e	dde          gZdS )    N)settings)TimestampSigner)path)ValidationError   )JoinRequestJoinResponseListPeersResponseOperationMessagePeerMessageRequestSavedMessagec                    K   | d                              d          }t          D ]7}|                    |          x}r |j        | ||fi |j         d {V   d S 8 |ddi           d {V  d S )Nr   /typewebsocket.close)lstripurlpatternsresolvefunckwargs)scopereceivesendr   patternmatcheds         X/var/www/html/01_SiteInternet/03_Maps/venv/lib/python3.11/site-packages/umap/sync/app.pyapplicationr      s      =$$D 0 0ood+++7 	',ugtFFw~FFFFFFFFFEE	 dF-.///////////    c                 
  K   t          |d                   }||_        	  |             d {V }|d         dk    rR	 |                                 d {V   |ddi           d {V  n## t          $ r  |ddi           d {V  Y nw xY w|d         dk    r|                                 d {V  d S |d         dk    rB|d	         d
k    r |ddd           d {V  n!|                    |d	                    d {V  )Nmap_idTr   zwebsocket.connectzwebsocket.acceptr   zwebsocket.disconnectzwebsocket.receivetextpingwebsocket.sendpongr   r"   )Peer_sendconnect
ValueError
disconnectr   )r   r   r   r   peerevents         r   syncr.      s     x !!DDJ2gii=///8llnn$$$$$$$dF$678888888888 8 8 8dF$56777777777778 =222//#########E=///V}&&d$4fEEFFFFFFFFFFll5=111111111%2s   -A+ +B
Bc                       e Zd ZddZed             Zed             Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )r'   Nc                 B    |pd| _         || _        d| _        g | _        d S )N F)usernamer!   is_authenticated_subscriptions)selfr!   r2   s      r   __init__zPeer.__init__8   s*     B % r   c                     d| j          S )Nzumap:)r!   r5   s    r   room_keyzPeer.room_key>   s    $t{$$$r   c                 &    d| j          d| j         S )Nuser::)r!   peer_idr8   s    r   peer_keyzPeer.peer_keyB   s    3t{33T\333r   c                   K   | j                             | j                   d {V }| j                             d| j         d           d {V s?| j                             | j                   d {V  |                                  d {V  d D             | j                                        vr,	                    | j                                                   fd|
                                D             S )Nr;   z:*c                 D    g | ]}|                     d           d         S )   :)split).0names     r   
<listcomp>z"Peer.get_peers.<locals>.<listcomp>N   s)    :::4$**T""2&:::r   c                 $    i | ]\  }}|v 	||S  rH   )rD   kvactives      r   
<dictcomp>z"Peer.get_peers.<locals>.<dictcomp>R   s$    >>>A!v++1+++r   )clienthgetallr9   pubsub_channelsr!   deletestore_usernamer=   encodeappenditems)r5   knownrK   s     @r   	get_peerszPeer.get_peersF   s+     k))$-88888888{223J4;3J3J3JKKKKKKKK 	( +$$T]333333333%%'''''''''::6:::<  ..MM$,--//000>>>>>>>>r   c                 l   K   | j                             | j        | j        | j                   d {V  d S N)rM   hsetr9   r=   r2   r8   s    r   rQ   zPeer.store_usernameT   s>      kt}dlDMJJJJJJJJJJJr   c                    K    fd} j                                         4 d {V } j                            |           t	          j         ||                     d d d           d {V  d S # 1 d {V swxY w Y   d S )Nc                   K   |                                 d {V  	 | j        d S 	 |                     d           d {V }n,# t          $ r}t	          j        |           Y d }~d S d }~ww xY w|3                    |d                                                    d {V  t          j	        d           d {V  )NT)ignore_subscribe_messagesdatagMbP?)
	subscribe
connectionget_message	Exceptionloggingdebugr   decodeasynciosleep)pubsubmessageerrchannel_namer5   s      r   readerz&Peer.listen_to_channel.<locals>.readerX   s     ""<000000000+$,E$*$6$6QU$6$V$VVVVVVVGG    M#&&&EEEEE &))GFO$:$:$<$<=========mE*********+s   A 
A0A++A0)rM   rg   r4   rS   re   create_task)r5   rj   rk   rg   s   ``  r   listen_to_channelzPeer.listen_to_channelW   s'     	+ 	+ 	+ 	+ 	+ 	+ ;%%'' 	0 	0 	0 	0 	0 	0 	06&&v...v///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   8A55
A?A?c                    K   |                      | j                   d {V  |                      | j                   d {V  d S rX   )rm   r9   r>   r8   s    r   listenzPeer.listenk   s\      $$T]333333333$$T]33333333333r   c                 P   K   t          j        t          j                  | _        d S rX   )redisfrom_urlr   	REDIS_URLrM   r8   s    r   r)   zPeer.connecto   s      nX%788r   c                 \  K   | j         r| j                            | j        | j                   d {V  | j        D ]6}|                                 d {V  |                                 d {V  7|                                  d {V  | j        	                                 d {V  d S rX   )
r3   rM   hdelr9   r=   r4   unsubscribeclosesend_peers_listaclose)r5   rg   s     r   r+   zPeer.disconnectr   s        	)+""4=$,?????????- % %((*********llnn$$$$$$$$&&(((((((((k  """""""""""r   c                    K   t          |                                  d {V           }|                     |                                           d {V  d S )N)peers)r
   rV   	broadcastmodel_dump_jsonr5   rh   s     r   rx   zPeer.send_peers_list{   sh      #0@0@*@*@*@*@*@*@AAAnnW446677777777777r   c                    K   t          j        d|           | j                            | j        |           d {V  d S )NBROADCASTING)rb   rc   rM   publishr9   r~   s     r   r|   zPeer.broadcast   sJ      ng...k!!$-99999999999r   c                    K   t          j        d||           | j                            d| j         d| |           d {V  d S )NzSEND TOr;   r<   )rb   rc   rM   r   r!   )r5   r=   rh   s      r   send_tozPeer.send_to   s]      i'222k!!"A$+"A"A"A"A7KKKKKKKKKKKr   c                   K   | j         st          j        d|           t          j        |          }t                                          |j        d          }|                                \  }}}t          |          | j
        k    sJ d|vr|                                  d {V S |j        | _        |j        | _        t          j        d| j                   |                                  d {V  |                                  d {V  t#          | j        |                                  d {V           }|                     |                                           d {V  |                                  d {V  d| _         d S 	 t-          j        |          }|j        xt0          d x \    |                     |           d {V  d S  xt4          d x \    |                     |           d {V  d S  t6          d x*\   |                     |j        j        |           d {V  d S  d S # t<          $ r%}	d	|}t          j        ||	           Y d }	~	d S d }	~	ww xY w)
NAUTHENTICATING   )max_ageeditAUTHENTICATED)r,   r{   TrH   z8An error occurred when receiving the following message: ) r3   rb   rc   r   model_validate_jsonr   unsign_objecttokenvaluesstrr!   r+   r,   r=   r2   rQ   ro   r	   rV   r   r}   rx   r   rootr   r|   r   r   r   	recipientr   error)
r5   	text_datarh   signeduserr!   permissionsresponseincomingr   s
             r   r   zPeer.receive   s     $ 	M*I666!5i@@G$&&44W]B4OOF(.%D&+v;;$+----[((!__........."<DL#,DMM/4<888%%'''''''''++--#4>>CSCS=S=S=S=S=S=STTTH))H4466777777777&&((((((((($(D!F	K29==H -'%''''''..33333333333 ( $\^^^^^^..33333333333 $ !]]]]],,x}'>	JJJJJJJJJJJ #]]!  	* 	* 	*X9XX  M'5)))))))))		*s   H: :
I)I$$I)c                    K   t          j        d| j        |           	 |                     d|d           d {V  d S # t          $ r4}t          j        d|           t          j        |           Y d }~d S d }~ww xY w)Nz  FORWARDING TOr$   r&   zError sending message:)rb   rc   r=   r(   ra   )r5   r"   ri   s      r   r   z	Peer.send   s      't<<<	**&6EEFFFFFFFFFFF 	 	 	M2D999M#	s   ? 
A=	)A88A=rX   )__name__
__module____qualname__r6   propertyr9   r>   rV   rQ   rm   ro   r)   r+   rx   r|   r   r   r   rH   r   r   r'   r'   7   s       ! ! ! ! % % X% 4 4 X4? ? ?K K K0 0 0(4 4 49 9 9# # #8 8 8: : :
L L L
'K 'K 'KR    r   r'   zws/sync/<str:map_id>ws_sync)rE   view)re   rb   redis.asynciorq   django.confr   django.core.signingr   django.urlsr   pydanticr   payloadsr   r	   r
   r   r   r   r   r   r.   r'   r   rH   r   r   <module>r      s:                       / / / / / /       $ $ $ $ $ $                 0 0 02 2 20A A A A A A A AH t*FFFGr   