§
    $š¢jØ!  ã                   óŽ   — d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
 e G d„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )	up   
Bá»™ GiÃ¡m SÃ¡t Nháº­t KÃ½ Giao Dá»‹ch & Sá»± Kiá»‡n Trá»±c Tiáº¿p tá»« Client.txt (POE2 Realtime Log Watcher)
é    N)Ú	dataclass)ÚCallableÚListÚOptionalc                   ó^   — e Zd ZU eed<   eed<   eed<   eed<   eed<   dZeed<   dZeed<   d	S )
ÚLogEventÚ
event_typeÚsenderÚmessageÚ	timestampÚraw_lineÚ Ú	area_nameÚ	area_codeN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   r   © ó    ú6C:\Projects\AutoPOE2\src\assistant_tool\log_watcher.pyr   r      s_   € € € € € € à€O€O�OØ€K€K�KØ€L€L�LØ€N€N�NØ€M€M�MØ€IˆsÐÐÑØ€IˆsÐÐÑÐÐr   r   c                   óò   — e Zd Z eh d£¦  «        ZdZdefd„Zedede	fd„¦   «         Z
deegd	f         dd	fd
„Zdedd	fd„Zde	fd„Zdd„Zdee         fd„Zdd„Zdedee         fd„Zdedededd	fd„Zd	S )Ú
LogWatcher>	   úact 1úact 2úact 3úact 4ú(null)ú	(unknown)ú	world mapú[dnt] world mapÚatlasi    Úlog_pathc                 ój  — || _         d| _        d | _        g | _        t	          j        d¦  «        | _        t	          j        d¦  «        | _        t	          j        d¦  «        | _        t	          j        d¦  «        | _	        t	          j        d¦  «        | _
        t	          j        d¦  «        | _        d S )NFzk^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).+?\[INFO Client \d+\] @(From|To) (?:<[^>]+> )?([a-zA-Z0-9_]+): (.+)$zU^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).+?\[INFO Client \d+\] \$([a-zA-Z0-9_]+): (.+)$zG^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).+?\[SCENE\] Set Source \[(.+?)\]z^^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).+?Generating level (\d+) area "([^"]+)" with seed (\d+)za^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).+?\[INFO Client \d+\] (Trade accepted\.|Trade cancelled\.)zm^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}).+?\[INFO Client \d+\] : (.+?) (has been slain|has committed suicide)\.)r$   Ú_runningÚ_threadÚ
_listenersÚreÚcompileÚ_re_whisperÚ_re_trade_chatÚ	_re_sceneÚ_re_area_genÚ_re_trade_statusÚ_re_player_death)Úselfr$   s     r   Ú__init__zLogWatcher.__init__)   s¹   € Ø ˆŒØˆŒØ37ˆŒØ<>ˆŒõ œ:Øzñ
ô 
ˆÔõ !œjØdñ
ô 
ˆÔõ œØVñ
ô 
ˆŒõ œJØmñ
ô 
ˆÔõ !#¤
Øpñ!
ô !
ˆÔõ !#¤
Ø|ñ!
ô !
ˆÔÐÐr   Ú	zone_nameÚreturnc                 óž   — |pd                      ¦   «         }|sdS |                     ¦   «         }|                     d¦  «        rdS || j        v S )Nr   Tz[dnt)ÚstripÚlowerÚ
startswithÚIGNORED_SCENES)Úclsr3   Úcleanr7   s       r   Úis_ignored_scenezLogWatcher.is_ignored_sceneI   sZ   € à�˜b×'Ò'Ñ)Ô)ˆØð 	Ø�4Ø—’‘”ˆØ×Ò˜FÑ#Ô#ð 	Ø�4Ø˜Ô*Ð*Ð*r   ÚcallbackNc                 ó:   — | j                              |¦  «         d S ©N)r(   Úappend)r1   r=   s     r   Úregister_listenerzLogWatcher.register_listenerS   s   € ØŒ×Ò˜xÑ(Ô(Ð(Ð(Ð(r   Úeventc                 óR   — | j         D ]}	  ||¦  «         Œ# t          $ r Y Œw xY wd S r?   )r(   Ú	Exception)r1   rB   Úcbs      r   Ú	_dispatchzLogWatcher._dispatchV   sQ   € Ø”/ð 	ð 	ˆBðØ��5‘	”	�	�	øÝð ð ð Ø�ðøøøð	ð 	s   ‹—
$£$c                 óÒ   — t           j                             | j        ¦  «        sdS d| _        t          j        | j        d¬¦  «        | _        | j         	                    ¦   «          dS )NFT)ÚtargetÚdaemon)
ÚosÚpathÚexistsr$   r&   Ú	threadingÚThreadÚ
_tail_loopr'   Ústart©r1   s    r   rP   zLogWatcher.start]   sX   € ÝŒw�~Š~˜dœmÑ,Ô,ð 	Ø�5àˆŒÝ Ô'¨t¬ÀtÐLÑLÔLˆŒØŒ×ÒÑÔÐØˆtr   c                 ó’   — d| _         | j        r6| j                             ¦   «         r| j                             d¬¦  «         d S d S d S )NFg      ð?)Útimeout)r&   r'   Úis_aliveÚjoinrQ   s    r   ÚstopzLogWatcher.stopf   s[   € ØˆŒØŒ<ð 	+˜DœL×1Ò1Ñ3Ô3ð 	+ØŒL×Ò cÐÑ*Ô*Ð*Ð*Ð*ð	+ð 	+ð 	+ð 	+r   c                 ór  — t           j                             | j        ¦  «        sdS 	 t           j                             | j        ¦  «        }t          d|| j        z
  ¦  «        }d}t          | j        ddd¬¦  «        5 }|dk    r)|                     |¦  «         | 	                    ¦   «          |D ]8}|  
                    |                     ¦   «         ¦  «        }|r|j        dk    r|}Œ9	 ddd¦  «         n# 1 swxY w Y   |r|S dS # t          $ r%}t          d| j        › d	|› �¦  «         Y d}~dS d}~ww xY w)
uM  
        Ä�á»�c Ä‘uÃ´i Client.txt vÃ  phÃ¡t ZONE_CHANGE cho SCENE chÆ¡i tháº­t gáº§n nháº¥t.
        Cáº§n gá»�i SAU khi listener (lifecycle) Ä‘Ã£ Ä‘Äƒng kÃ½: tool má»Ÿ giá»¯a map
        khÃ´ng Ä‘Æ°á»£c káº¹t 'chá»� xÃ¡c thá»±c' chá»‰ vÃ¬ tail báº¯t Ä‘áº§u á»Ÿ EOF.
        Overlay Act 1â€“4 / Atlas / (null) bá»‹ bá»� qua.
        Nr   Úrúutf-8Úreplace©ÚencodingÚerrorsÚZONE_CHANGEu"   [LogWatcher] Lá»—i seed zone tá»« ú: )rJ   rK   Úisfiler$   ÚgetsizeÚmaxÚSEED_TAIL_BYTESÚopenÚseekÚreadlineÚ
parse_liner6   r	   rD   Úprint)r1   ÚsizerP   Ú
last_sceneÚfÚrawrB   Úes           r   Úseed_latest_playable_zonez$LogWatcher.seed_latest_playable_zonek   s’  € õ Œw�~Š~˜dœmÑ,Ô,ð 	Ø�4ð	Ý”7—?’? 4¤=Ñ1Ô1ˆDÝ˜˜4 $Ô"6Ñ6Ñ7Ô7ˆEØ-1ˆJÝ�d”m S°7À9ÐMÑMÔMð +ÐQRØ˜1’9�9Ø—F’F˜5‘M”M�MØ—J’J‘L”L�LØð +ð +�CØ ŸOšO¨C¯IªI©K¬KÑ8Ô8�EØð + Ô!1°]Ò!BÐ!BØ%*˜
øð+ð	+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð ð "Ø!Ð!Ø�4øÝð 	ð 	ð 	ÝÐK°t´}ÐKÐKÈÐKÐKÑLÔLÐLØ�4�4�4�4�4øøøøð	øøøs=   ¨AD Á>A+C6Ã*D Ã6C:Ã:D Ã=C:Ã>D Ä
D6ÄD1Ä1D6c                 óü  — 	 t          | j        ddd¬¦  «        5 }|                     dt          j        ¦  «         | j        rp|                     ¦   «         }|st          j        d¦  «         Œ2|  	                    | 
                    ¦   «         ¦  «        }|r|                      |¦  «         | j        °pd d d ¦  «         d S # 1 swxY w Y   d S # t          $ r%}t          d| j        › d|› �¦  «         Y d }~d S d }~ww xY w)	NrX   rY   rZ   r[   r   gš™™™™™É?u   [LogWatcher] Lá»—i Ä‘á»�c file r_   )rd   r$   re   rJ   ÚSEEK_ENDr&   rf   ÚtimeÚsleeprg   r6   rF   rD   rh   )r1   rk   ÚlinerB   rm   s        r   rO   zLogWatcher._tail_loop‡   s_  € ð	JÝ�d”m S°7À9ÐMÑMÔMð .ÐQRà—’�q�"œ+Ñ&Ô&Ð&Ø”mð .ØŸ:š:™<œ<�DØð !Ýœ
 3™œ˜Ø à ŸOšO¨D¯JªJ©L¬LÑ9Ô9�EØð .ØŸš uÑ-Ô-Ð-ð ”mð .ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð .ð .øõ ð 	Jð 	Jð 	JÝÐH°D´MÐHÐHÀQÐHÐHÑIÔIÐIÐIÐIÐIÐIÐIÐIøøøøð	Jøøøs;   ‚C šBB?Â2C Â?CÃC ÃCÃC Ã
C;ÃC6Ã6C;rs   c                 ó<  — | j                              |¦  «        }|r`|                     ¦   «         \  }}}}t          d|                     ¦   «         v sd|                     ¦   «         v rdnd|› d|› �|||¬¦  «        S | j                             |¦  «        }|r,|                     ¦   «         \  }}}t          d||||¬¦  «        S | j                             |¦  «        }|r.|                     ¦   «         \  }}	}
}t          dd	|
|||
¬
¦  «        S | j                             |¦  «        }|r\|                     ¦   «         \  }}|pd                     ¦   «         }|  	                    |¦  «        rd S t          dd	d|› �|||¬¦  «        S | j
                             |¦  «        }|r+|                     ¦   «         \  }}t          dd	|||¬¦  «        S | j                             |¦  «        }|r2|                     ¦   «         \  }}}t          d||› d|› d�||¬¦  «        S d S )NÚbuyÚwtsÚWHISPER_TRADEÚWHISPERú ©r	   r
   r   r   r   Ú
TRADE_CHATÚAREA_GENERATEDÚSystem)r	   r
   r   r   r   r   r   r^   u    Ä�Ã£ chuyá»ƒn Ä‘áº¿n khu vá»±c: )r	   r
   r   r   r   r   ÚTRADE_STATUSÚPLAYER_DEATHú.)r+   ÚsearchÚgroupsr   r7   r,   r.   r-   r6   r<   r/   r0   )r1   rs   Úm_whispÚtsÚ	directionr
   ÚmsgÚm_tcÚm_genÚ_levelr   Ú_seedÚm_scr3   Ú
clean_zoneÚm_statÚstatusÚm_deathÚplayer_nameÚreasons                       r   rg   zLogWatcher.parse_line˜   s®  € àÔ"×)Ò)¨$Ñ/Ô/ˆØð 	Ø)0¯ªÑ)9Ô)9Ñ&ˆB�	˜6 3ÝØ/4¸¿	º	¹¼Ð/CÐ/CÀuÐPS×PYÒPYÑP[ÔP[ÐG[ÐG[˜?˜?ÐbkØ#Ð.Ð. fÐ.Ð.ØØØðñ ô ð ð Ô"×)Ò)¨$Ñ/Ô/ˆØð 	Ø"Ÿkšk™mœm‰OˆB�˜ÝØ'ØØØØðñ ô ð ð Ô!×(Ò(¨Ñ.Ô.ˆØð 		Ø+0¯<ª<©>¬>Ñ(ˆB�˜	 5ÝØ+ØØ!ØØØ#ðñ ô ð ð Œ~×$Ò$ TÑ*Ô*ˆØð 	Ø ŸKšK™MœM‰MˆB�	Ø#˜/ r×0Ò0Ñ2Ô2ˆJØ×$Ò$ ZÑ0Ô0ð Ø�tÝØ(ØØG¸:ÐGÐGØØØ$ðñ ô ð ð Ô&×-Ò-¨dÑ3Ô3ˆØð 	ØŸš™œ‰JˆB�ÝØ)ØØØØðñ ô ð ð Ô'×.Ò.¨tÑ4Ô4ˆØð 	Ø&-§n¢nÑ&6Ô&6Ñ#ˆB�˜VÝØ)Ø"Ø&Ð2Ð2¨Ð2Ð2Ð2ØØðñ ô ð ð ˆtr   r	   r
   r   c           
      óˆ   — t          |||t          j        d¦  «        d|› d|› �¬¦  «        }|                      |¦  «         dS )uQ   Há»— trá»£ báº¯n sá»± kiá»‡n giáº£ láº­p phá»¥c vá»¥ kiá»ƒm thá»­ vÃ  demo nhanh.z%Y/%m/%d %H:%M:%Sz[SIMULATED] r_   rz   N)r   rq   ÚstrftimerF   )r1   r	   r
   r   rB   s        r   Úsimulate_eventzLogWatcher.simulate_eventè   sZ   € åØ!ØØÝ”mÐ$7Ñ8Ô8Ø7 FÐ7Ð7¨gÐ7Ð7ð
ñ 
ô 
ˆð 	�Š�uÑÔÐÐÐr   )r4   N)r   r   r   Ú	frozensetr9   rc   r   r2   ÚclassmethodÚboolr<   r   r   rA   rF   rP   rV   r   rn   rO   rg   r”   r   r   r   r   r      sš  € € € € € à�Yð 
 ð 
 ð 
 ñ 
ô 
€Nð &€Oð
 ð 
ð 
ð 
ð 
ð@ ð+¨ð +°ð +ð +ð +ñ „[ð+ð)¨(°H°:¸tÐ3CÔ*Dð )Èð )ð )ð )ð )ð˜xð ¨Dð ð ð ð ð�tð ð ð ð ð+ð +ð +ð +ð
¨8°HÔ+=ð ð ð ð ð8Jð Jð Jð Jð"N˜sð N x°Ô'9ð Nð Nð Nð Nð`	¨ð 	°cð 	ÀCð 	ÈDð 	ð 	ð 	ð 	ð 	ð 	r   r   )Ú__doc__rJ   r)   rM   rq   Údataclassesr   Útypingr   r   r   r   r   r   r   r   ú<module>r›      sØ   ððð ð 
€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +ð ðð ð ð ð ñ ô ñ „ððYð Yð Yð Yð Yñ Yô Yð Yð Yð Yr   