
    !Rj8                        d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
  e
d      Zedz  Zedz  Zedz  ed	z  gZd
\  ZZddZd ZddZd Zd Zd Zd Zd Zedk(  r e e             y)zKSelf-healing launcher and compact state for MCSJ's in-process Swing bridge.    )annotationsN)PathzC:/MCSJAgent/SwingBridgezmcsj-swing-bridge-client.pyzjattach32.exez	Agent.jarzAgentV2.jar)z	127.0.0.1iE&  c                l    t        j                  | D cg c]  }t        |       c}dd|      S c c}w )NT)textcapture_outputtimeout)
subprocessrunstr)cmdr   xs      C:/MCSJAgent/mcsj-fast-swing.pyr
   r
      s.    >>3/3a3q63/d4Y`aa/s   1c                     t        g d      } | j                  rt        d      t        | j                  j                               S )N)powershell.exe
-NoProfile-Commandzd(Get-Process MCSJ -ErrorAction Stop | Sort-Object StartTime -Descending | Select-Object -First 1).IdzMCSJ.exe is not running)r
   
returncodeRuntimeErrorintstdoutstrip)pss    r   mcsj_pidr      s<    	  b  
cB	}}455ryy !!    c                T   	 t        j                  t        t        f|       5 }|j	                  d       |j                  t         j                         |j                  d      j                  d      j                         dk(  cd d d        S # 1 sw Y   y xY w# t        $ r Y yw xY w)Nr   s   PING
d   replace)errorsPONGF)socketcreate_connectionHOSTPORTsendallshutdownSHUT_WRrecvdecoder   OSError)r   ss     r   pingr,      s    %%tTlGDIIi !**V^^"<66#;%%Y%7==?6I EDD  s/   !B A"B	B BB B 	B'&B'c                     t        ddddt         dg      } | j                  j                         }|j	                         rt        |      S d S )Nr   r   r   z/(Get-NetTCPConnection -State Listen -LocalPort zF -ErrorAction SilentlyContinue | Select-Object -First 1).OwningProcess)r
   r$   r   r   isdigitr   )r   r   s     r   
port_ownerr/   "   sW    	j<klpkq  rx  ;y  z  
{B99??D3t90D0r   c           	         t        t        | ddd| dgd      }|j                  dk(  |j                  |j                  z   j                         fS )Nload
instrumentfalse=   r   r   )r
   JATTACHr   r   stderrr   )pidagentresults      r   attachr;   (   sN    '3g%{KUWXF!FMMFMM$A#H#H#JJJr   c            	        t               } t               }t               r+|d | fvrt        dt         d| d|        d| t        |dddS ||| k7  rt        dt         d	|       g }t
        D ]y  }t        | |      \  }}|j                  |j                  ||d
d  d       t        d      s@t               }|d | fvrt        d| d|        d| t        |d|j                  |dc S  t        dt        j                  |      z         )NzSwing bridge port z is owned by PID z, not MCSJ PID OKFexisting)statusr8   portownerPidattachedNowr9   zport z" is already owned by non-MCSJ PID i)r9   attachOkdetail   z&bridge answered but port owner is PID z, expected T)r?   r8   r@   rA   rB   r9   attemptszunable to attach Swing bridge: )r   r/   r,   r   r$   AGENTSr;   appendnamejsondumps)r8   ownerrF   r9   okrD   s         r   ensurerN   -   s4   
*CLEvs#!3D69J5'Q`ad`efggCtuSXakllUc\U4&(J5'RSSHC'
Fr6$%=QR7LET3K'"%KE7R]^a]b#cdd!45W[didndn  {C  D  D  84::h;OO
PPr   c                   	 t               } t        t        j                  t        dddgd      }|j
                  r?t        |j                  j                         xs |j                  j                               t        j                  |j                        }|j                  dg       }g g g dd	fd		|D ]
  } 	|        i | |r|d   j                  d	      nd t        |      d
S )Nz	--timeout10tree   r   windowsr   c           	        | j                  dd      }| j                  dd      }| j                  dd      }|xs |j                  d      }|j                  d      r	dz  	|j                  d      r|rj                  |       |rY|rW|j                  d      s|j                  d      r5
j                  |||| j                  d	      | j                  d
      d       |j                  d      r9|dvr5j                  |||| j                  d
      | j                  d	      d       | j                  dg       D ]  } ||        y )Nclass r   rI   
JPopupMenu   EMenu	EMenuItemenabledvisible)rU   rI   r   r[   r\   InternalFrame)zInternalFrame.northPanerV   )rU   rI   r   r\   r[   children)getendswithrH   )nodein_popupclsr   rI   	now_popupchildinternalmenuspopup_countpopup_itemswalks          r   rj   zcompact_state.<locals>.walkI   s"   HHWR txxr':$&QSATD:\ :	<<%{a'7{<< T5<<+=3<<#8CLL<U4tdhhW`Nalpltltu~l   A  B<<(T9X-XOOSD488T]K^imiqiqr{i|}~XXj,Ed5).D,r   title)rk   windowCountrg   internalFrames
popupCount
popupItems)F)rN   r
   sys
executableCLIENTr   r   r7   r   r   rJ   loadsr_   len)
readyrQ   objrS   windowrf   rg   rh   ri   rj   s
        @@@@@r   compact_staterx   B   s    
(E	cnnfk4@"	MDl4;;+<+<+>+U$++BSBSBUVV

4;;CGGIb!G
Erhr;q;
E 
E 4<' e  wGAJNN73DWZ[bWclq  DL  Ze  s~    r   c            	        t        j                         } | j                  dg d       | j                         }	 |j                  dk(  r(t               rdndt               t        t               d}n$|j                  dk(  rt               }n
t               }t        t        j                  |d	
             |j                  d      dvry	 y# t        $ r6}t        t        j                  dt!        |      dd	
             Y d }~yd }~ww xY w)Ncommand)rN   stater,   )choicesr,   r=   DOWN)r?   r8   r@   rA   rN   ),:)
separatorsr?   )r=      ERROR)r?   messager   )argparseArgumentParseradd_argument
parse_argsrz   r,   r   r$   r/   rN   rx   printrJ   rK   r_   	Exceptionr   )pargsoutexcs       r   mainr   X   s    A	B[!\cdcococq^b<<tvt6PXPZbfr|r~%\\8#S/cdjj	23778G+A+   djj7SX>)TUs   BC 	D,DD__main__)r5   )g      ?)__doc__
__future__r   r   rJ   rer!   r	   rp   pathlibr   ROOTrr   r6   rG   r#   r$   r
   r   r,   r/   r;   rN   rx   r   __name__
SystemExit r   r   <module>r      s    Q " 2 2 2 &'	-	-

 

d]2	3
db"1K
Q*, Zz$&11r   