o
    jZh                     @   st   d 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ZddlZdZ	G dd dej
Zedkr8ee dS dS )z
A windows service wrapper for the py.execnet socketserver.

To use, run:
 python socketserverservice.py register
 net start ExecNetSocketServer
    NZExecNetSocketServerc                       s>   e Zd ZeZde ZdgZ fddZdd Zdd Z	  Z
S )	SocketServerServicez%sZEventLogc                    s8   t | jtjd t| td ddd | _	d| _
d S )NApplicationr   i  )win32evtlogutilAddSourceToRegistry_svc_display_name_servicemanager__file__super__init__
win32eventZCreateEvent	hWaitStop	WAIT_TIME)selfargs	__class__ Y/var/www/html/lang_env/lib/python3.10/site-packages/execnet/script/socketserverservice.pyr
      s   	


zSocketServerService.__init__c                 C   s   |  tj t| j d S )N)ZReportServiceStatuswin32serviceZSERVICE_STOP_PENDINGr   ZSetEventr   )r   r   r   r   SvcStop+   s   zSocketServerService.SvcStopc                 C   s   t dd t_t_t| jtjdtj	| j
df td| j  d}td|  t|}tjtj|fdd	id
}|d	 |  	 t| j| j}|tjkrPnqBt| jtjdtj	| j
df tdt  d S )Nnulwr    z	Begin: %sz:8888z&Starting py.execnet SocketServer on %sloopT)targetr   kwargszEnd: %s)opensysstdoutstderrr   ReportEventr   r   ZPYS_SERVICE_STARTEDEVENTLOG_INFORMATION_TYPE
_svc_name_printsocketserverZbind_and_listen	threadingThreadZstartserver	setDaemonstartr   ZWaitForSingleObjectr   r   ZWAIT_OBJECT_0ZPYS_SERVICE_STOPPEDappname)r   hostportZ
serversockthreadresultr   r   r   SvcDoRun/   s<   


zSocketServerService.SvcDoRun)__name__
__module____qualname__r)   r"   r   Z
_svc_deps_r
   r   r-   __classcell__r   r   r   r   r      s    r   __main__)__doc__r$   r   r%   r   r   r   r   Zwin32serviceutilr)   ZServiceFrameworkr   r.   ZHandleCommandLiner   r   r   r   <module>   s    C