§
    �Q»jä  ã                   ó‚   — d Z ddlZddlZddlmZmZmZ ddlmZm	Z	 e G d„ d¦  «        ¦   «         Z
 G d„ d¦  «        ZdS )	z
Session Manager for FreeExile Edge Gateway.
Maintains active socket connections, latency metrics, and stale session eviction.
é    N)ÚDictÚListÚOptional)Ú	dataclassÚfieldc                   ó¬   — e Zd ZU eed<   eed<   eed<   eed<    eej        ¬¦  «        Ze	ed<    eej        ¬¦  «        Z
e	ed<   dZe	ed	<   d
Zeed<   dS )ÚClientSessionÚ
session_idÚ
account_idÚ	entity_idÚ	client_ip)Údefault_factoryÚconnected_timestampÚlast_heartbeat_timestampg        Úlast_latency_msFÚis_authenticatedN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úintr   Útimer   Úfloatr   r   r   Úbool© ó    ú7C:\Projects\FreeExile\server\gateway\session_manager.pyr	   r	      s—   € € € € € € à€O€O�OØ€O€O�OØ€N€N�NØ€N€N�NØ!& °t´yÐ!AÑ!AÔ!AÐ˜ÐAÐAÑAØ&+ e¸D¼IÐ&FÑ&FÔ&FÐ˜eÐFÐFÑFØ €O�UÐ Ð Ñ Ø"Ð�dÐ"Ð"Ñ"Ð"Ð"r   r	   c                   ó˜   — e Zd Zddefd„Zdedededefd„Zd	ede	e         fd
„Z
d	ededefd„Zd	ede	e         fd„Zdee         fd„ZdS )ÚSessionManagerç      >@Úsession_timeout_secondsc                 ó0   — || _         i | _        i | _        d S ©N)r"   ÚsessionsÚentity_to_session)Úselfr"   s     r   Ú__init__zSessionManager.__init__   s   € Ø'>ˆÔ$Ø24ˆŒØ13ˆÔÐÐr   r   r   r   Úreturnc                 óš   — dt          j        ¦   «         j        d d…         › �}t          ||||¬¦  «        }|| j        |<   || j        |<   |S )NÚsess_é   )r
   r   r   r   )ÚuuidÚuuid4Úhexr	   r%   r&   )r'   r   r   r   r
   Úsessions         r   Úcreate_sessionzSessionManager.create_session   sa   € Ø4�TœZ™\œ\Ô-¨c¨r¨cÔ2Ð4Ð4ˆ
ÝØ!Ø!ØØð	
ñ 
ô 
ˆð %,ˆŒ�jÑ!Ø,6ˆÔ˜yÑ)Øˆr   r
   c                 ó6   — | j                              |¦  «        S r$   )r%   Úget)r'   r
   s     r   Úget_sessionzSessionManager.get_session*   s   € ØŒ}× Ò  Ñ,Ô,Ð,r   Ú
latency_msc                 ó€   — | j                              |¦  «        }|sdS t          j        ¦   «         |_        ||_        dS )NFT)r%   r3   r   r   r   )r'   r
   r5   r0   s       r   Úrecord_heartbeatzSessionManager.record_heartbeat-   s?   € Ø”-×#Ò# JÑ/Ô/ˆØð 	Ø�5Ý+/¬9©;¬;ˆÔ(Ø",ˆÔØˆtr   c                 ó€   — | j                              |d ¦  «        }|r | j                             |j        d ¦  «         |S r$   )r%   Úpopr&   r   )r'   r
   r0   s      r   Úremove_sessionzSessionManager.remove_session5   sC   € Ø”-×#Ò# J°Ñ5Ô5ˆØð 	@ØÔ"×&Ò& wÔ'8¸$Ñ?Ô?Ð?Øˆr   c                 ó  — t          j         ¦   «         }g }t          | j                             ¦   «         ¦  «        D ]B\  }}||j        z
  | j        k    r*|                     |¦  «         |                      |¦  «         ŒC|S r$   )r   Úlistr%   Úitemsr   r"   Úappendr:   )r'   ÚnowÚ	stale_idsr
   r0   s        r   Úevict_stale_sessionsz#SessionManager.evict_stale_sessions;   s�   € ÝŒi‰kŒkˆØˆ	Ý#'¨¬×(;Ò(;Ñ(=Ô(=Ñ#>Ô#>ð 	0ð 	0ÑˆJ˜Ø�WÔ5Ñ5¸Ô8TÒTÐTØ× Ò  Ñ,Ô,Ð,Ø×#Ò# JÑ/Ô/Ð/øØÐr   N)r!   )r   r   r   r   r(   r   r   r	   r1   r   r4   r   r7   r:   r   rA   r   r   r   r    r       sû   € € € € € ð4ð 4°ð 4ð 4ð 4ð 4ð

¨ð 
¸ð 
Èð 
ÐQ^ð 
ð 
ð 
ð 
ð- cð -¨h°}Ô.Eð -ð -ð -ð -ð¨3ð ¸Eð Àdð ð ð ð ð¨ð °¸-Ô1Hð ð ð ð ð d¨3¤ið ð ð ð ð ð r   r    )Ú__doc__r   r-   Útypingr   r   r   Údataclassesr   r   r	   r    r   r   r   ú<module>rE      s¿   ððð ð
 €€€Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ð ð#ð #ð #ð #ð #ñ #ô #ñ „ð#ð*ð *ð *ð *ð *ñ *ô *ð *ð *ð *r   