B
    pj`                 @   sp   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rlee dS )z
A windows service wrapper for the py.execnet socketserver.

To use, run:
 python socketserverservice.py register
 net start ExecNetSocketServer
    NZExecNetSocketServerc               @   s6   e Zd ZeZde ZdgZdd Zdd Zdd Z	d	S )
SocketServerServicez%sZEventLogc             C   s<   t | jtjd tj| | t	d ddd | _
d| _d S )NZApplicationr   i  )win32evtlogutilZAddSourceToRegistry_svc_display_name_servicemanager__file__win32serviceutilServiceFramework__init__
win32eventZCreateEvent	hWaitStop	WAIT_TIME)selfargs r   Alib/python3.7/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	 |  x t| j| j}|tjkrP qW t| jtjdtj	| j
df tdt  d S )NZnulwr    z	Begin: %sz:8888z&Starting py.execnet SocketServer on %sZloopT)targetr   kwargszEnd: %s)opensysstdoutstderrr   ZReportEventr   r   ZPYS_SERVICE_STARTEDZEVENTLOG_INFORMATION_TYPE
_svc_name_printsocketserverZbind_and_listen	threadingZThreadZstartserverZ	setDaemonstartr
   ZWaitForSingleObjectr   r   ZWAIT_OBJECT_0ZPYS_SERVICE_STOPPEDappname)r   ZhostportZ
serversockZthreadresultr   r   r   SvcDoRun0   s4    


zSocketServerService.SvcDoRunN)
__name__
__module____qualname__r    r   r   Z
_svc_deps_r	   r   r"   r   r   r   r   r      s   r   __main__)__doc__r   r   r   r   r
   r   r   r   r    r   r   r#   ZHandleCommandLiner   r   r   r   <module>   s   C