ó
‚•oTc           @   s  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 m Z m	 Z	 d e	 j
 f d „  ƒ  YZ d e j f d „  ƒ  YZ d e f d „  ƒ  YZ e i d	 d
 6ƒ Z d „  Z d e j f d „  ƒ  YZ e d k re j e ƒ n  d S(   iÿÿÿÿN(   t   wspbust   pluginst   ConsoleCtrlHandlerc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s    t  |  _ t j j |  | ƒ d  S(   N(   t   Falset   is_setR   t   SimplePlugint   __init__(   t   selft   bus(    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyR      s    	c         C   sŠ   |  j  r# |  j j d d d ƒd  St j |  j d ƒ } | d k rg |  j j d t j ƒ  d d ƒn |  j j d d d ƒt |  _  d  S(   Ns'   Handler for console events already set.t   leveli(   i   i    s*   Could not SetConsoleCtrlHandler (error %r)s   Set handler for console events.(   R   R   t   logt   win32apit   SetConsoleCtrlHandlert   handlet   GetLastErrort   True(   R   t   result(    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   start   s    	c         C   s¨   |  j  s# |  j j d d d ƒd  Sy t j |  j d ƒ } Wn t k
 rU d } n X| d k r… |  j j d t j ƒ  d d ƒn |  j j d d d ƒt |  _  d  S(   Ns'   Handler for console events already off.R	   i(   i    i   s1   Could not remove SetConsoleCtrlHandler (error %r)s#   Removed handler for console events.(	   R   R   R
   R   R   R   t
   ValueErrorR   R   (   R   R   (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   stop"   s    	
c         C   su   | t  j t  j t  j t  j t  j f k rq |  j j d | ƒ y |  j ƒ  Wn t	 k
 r_ n X|  j j
 ƒ  d Sd S(   Ns#   Console event %s: shutting down busi   i    (   t   win32cont   CTRL_C_EVENTt   CTRL_LOGOFF_EVENTt   CTRL_BREAK_EVENTt   CTRL_SHUTDOWN_EVENTt   CTRL_CLOSE_EVENTR   R
   R   R   t   exit(   R   t   event(    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyR   4   s    (   t   __name__t
   __module__R   R   R   R   (    (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyR      s   			t   Win32Busc           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z e e e ƒ Z d d „ Z RS(   c         C   s   i  |  _  t j j |  ƒ d  S(   N(   t   eventsR    t   BusR   (   R   (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyR   M   s    	c         C   s`   y |  j  | SWnJ t k
 r[ t j d  d d d | j t j ƒ  f ƒ } | |  j  | <| SXd  S(   Ni    u   WSPBus %s Event (pid=%r)(   R   t   KeyErrort
   win32eventt   CreateEventt   Nonet   namet   ost   getpid(   R   t   stateR   (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   _get_state_eventQ   s    c         C   s   |  j  S(   N(   t   _state(   R   (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt
   _get_state\   s    c         C   s)   | |  _  |  j | ƒ } t j | ƒ d  S(   N(   R*   R)   R"   t
   PulseEvent(   R   t   valueR   (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt
   _set_state^   s    	gš™™™™™¹?c         C   s    t  | t t f ƒ rh |  j | k rœ t g  | D] } |  j | ƒ ^ q. ƒ } t j | d t j ƒ qœ n4 |  j | k rœ |  j | ƒ } t j | t j ƒ n  d  S(   Ni    (	   t
   isinstancet   tuplet   listR(   R)   R"   t   WaitForMultipleObjectst   INFINITEt   WaitForSingleObject(   R   R(   t   intervalt   sR   R   (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   waitd   s    ((	   R   R   R   R)   R+   R.   t   propertyR(   R7   (    (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyR   G   s   				t   _ControlCodesc           B   s   e  Z d  „  Z RS(   c         C   sA   x* |  j  ƒ  D] \ } } | | k r | Sq Wt d | ƒ ‚ d  S(   Ns'   The given object could not be found: %r(   t	   iteritemsR   (   R   t   objt   keyt   val(    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   key_for   s    (   R   R   R>   (    (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyR9   v   s   iŠ   t   gracefulc         C   sP   | d k r t  j |  ƒ n0 | d k r8 t  j |  ƒ n t  j |  t | ƒ d  S(   NR   t   restart(   t   win32serviceutilt   StopServicet   RestartServicet   ControlServicet   control_codes(   t   servicet   command(    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   signal_child‹   s
    t   PyWebServicec           B   sG   e  Z d  Z d  Z d Z d Z d Z d  Z d „  Z	 d „  Z
 d „  Z RS(   s   Python Web Servicet   pywebsvcc         C   s.   d d l  m } | j j ƒ  | j j ƒ  d  S(   Niÿÿÿÿ(   t   process(   t   cherrypyRK   R   R   t   block(   R   RK   (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   SvcDoRun    s    c         C   s1   d d l  m } |  j t j ƒ | j j ƒ  d  S(   Niÿÿÿÿ(   RK   (   RL   RK   t   ReportServiceStatust   win32servicet   SERVICE_STOP_PENDINGR   R   (   R   RK   (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   SvcStop¥   s    c         C   s   t  j j t j | ƒ ƒ d  S(   N(   RK   R   t   publishRE   R>   (   R   t   control(    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   SvcOtherª   s    N(   R   R   t
   _svc_name_t   _svc_display_name_R$   t
   _svc_deps_t
   _exe_name_t
   _exe_args_t   _svc_description_RN   RR   RU   (    (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyRI   ”   s   		t   __main__(   R&   t   threadR   R   R"   RP   RA   t   cherrypy.processR    R   R   R   R    R   t   dictR9   RE   RH   t   ServiceFrameworkRI   R   t   HandleCommandLine(    (    (    s*   /var/www/SABnzbd/cherrypy/process/win32.pyt   <module>   s   9/		