³ò
àŸÔPc        
   @€  s  d  Z  d d k l Z d d k Z d d k Z e i ƒ  d d k Z d d k Z d d k Z d d k	 Z	 e i ƒ  Z
 e i ƒ  Z e a d e f d „  ƒ  YZ e ƒ  Z d d d „ Z d d d „ Z d „  Z d	 „  Z d d d
 „ Z d „  Z d „  Z d „  Z d „  Z d S(   sÏ   
This module lets you execute things later within the primary gamethread.
It provides access to queues and delayed command management such that you
can interact safely with the server from external threads.
iÿÿÿÿ(   t   with_statementNt   TimeSortedQueuec           B€  sx   e  Z d  e f d „  ƒ  YZ d „  Z d „  Z d d d d „ Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z RS(   t   TimeNodec           B€  s   e  Z d  „  Z d „  Z RS(   c         C€  s%   | |  _  t | ƒ |  _ | |  _ d  S(   N(   t   namet   floatt   gotimet   cmd(   t   selfR   R   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   __init__   s    	c         C€  s>   |  i  | i  j  o d Sn  |  i  | i  j o d Sn d Sd  S(   Niÿÿÿÿi    i   (   R   (   R   t   b(    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   __cmp__   s
    (   t   __name__t
   __module__R   R
   (    (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyR      s   	c         C€  s   g  |  _  t i ƒ  |  _ d  S(   N(   t   nodest	   threadingt   Lockt   lock(   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyR   !   s    	c         C€  s:   |  i  i } i ƒ  z t i |  i | ƒ Wd  | ~ QXd  S(   N(   R   t   __exit__t	   __enter__t   bisectt   insortR   (   R   t   nodet   _[1](    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   addNode$   s    c         C€  sM   t  | t ƒ p | f } n |  i |  i | | | | p h  f | ƒ ƒ d  S(   N(   t
   isinstancet   tupleR   R   (   R   R   R   t   argst   kwR   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   add'   s    c         C€  sD   |  i  i } i ƒ  z! |  i o |  i d Sn d  SWd  | ~ QXd  S(   Ni    (   R   R   R   R   t   None(   R   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   getFirst+   s    
c         C€  s.   |  i  i } i ƒ  z |  i SWd  | ~ QXd  S(   N(   R   R   R   R   (   R   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   getList1   s    c         €  sT   ˆ  p d  Sn |  i  i } i ƒ  z" t ‡  f d †  |  i ƒ |  _ Wd  | ~ QXd  S(   Nc         €  s   |  i  ˆ  j S(    (   R   (   t   i(   R   (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   <lambda>7   s    (   R   R   R   t   filterR   (   R   R   R   (    (   R   sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   removeByName4   s    c         C€  sK   |  i  i } i ƒ  z( | |  i j o |  i i | ƒ n Wd  | ~ QXd  S(   N(   R   R   R   R   t   remove(   R   t   itemR   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyR$   8   s    c         C€  s5   |  i  i } i ƒ  z t |  i ƒ SWd  | ~ QXd  S(   N(   R   R   R   t   boolR   (   R   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   empty<   s    c      
   C€  sk   |  i  i } i ƒ  zH xA |  i D]6 } t i d d | i | i t i ƒ  | i	 f ƒ q! WWd  | ~ QXd  S(   Ni    s#   [%8s] in %s seconds from now,
  %s
(
   R   R   R   R   t   est   dbgmsgR   R   t   timeR   (   R   R   R    (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt
   printQueue?   s    
 (    N(   R   R   t   objectR   R   R   R   R   R   R   R#   R$   R'   R+   (    (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyR      s   							c         C€  s+   t  ƒ  t i t i ƒ  |  | | | ƒ d S(   sä   
    Executes a Python function at a later time. Requires a map to be started
    on the server (and ticks to be firing). Args can be passed in as a tuple,
    or as keyword argments. This is like a Python-based es_delayed.
    N(   t   registerTickert   timeqR   R*   (   t   secondsR   R   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   delayedK   s    c         C€  s.   t  ƒ  t i t i ƒ  |  | | | | ƒ d S(   s{  
    Executes a Python function at a later time. Requires a map to be started
    on the server (and ticks to be firing). Args can be passed in as a tuple,
    or as keyword argments. This is like a Python-based es_delayed.

    Use delayedname if you want to provide an identifier that can be used with
    cancelDelayed(identifier) to stop the execution before it happens.
    N(   R-   R.   R   R*   (   R/   R   R   R   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   delayednameT   s    	c         C€  s   t  i |  ƒ d S(   sH   
    Cancel a command by name that was scheduled with delayedname()
    N(   R.   R#   (   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   cancelDelayed`   s    c           C€  s   t  i ƒ  d S(   s2   
    Print the contents of the delayed queue.
    N(   R.   R+   (    (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   listDelayedf   s    c         C€  sE   t  ƒ  t | t ƒ p | f } n t i |  | | p h  f ƒ d S(   sã   
    Queue a command to be run on the very next tick. Requires a map be started
    on the server (and ticks to be firing). Args can be passed in as a tuple,
    or as keyword argments. This is like a Python-based es_soon.
    N(   R-   R   R   t   qt   put(   t   functiont   aR   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   queuel   s    c          C€  sE   t  i }  i ƒ  z% t p t a t i i t ƒ n Wd |  ~  QXd S(   sl   
  Internal use recommended. Registers a ticklistener for the gamethread
  usage if one isn't registered.
  N(	   t   register_lockR   R   t   tickregt   TrueR(   t   addonst   registerTickListenert   tick(   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyR-   |   s    c          C€  sE   t  i }  i ƒ  z% t o t a t i i t ƒ n Wd |  ~  QXd S(   sk   
  Internal use recommended.
  Unregisters a ticklistener for the gamethread usage if one is configured.
  N(	   R9   R   R   R:   t   FalseR(   R<   t   unregisterTickListenerR>   (   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   unregisterTicker‡   s    c         C€  s8   |  i  \ } } } t i |  ƒ z | | | Ž  Wd Xd S(   si   
    Internal use recommended.
    Helper function to execute and then remove an item from the gameq
    N(   R   R.   R$   (   R   R6   R7   R   (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyt   _executenode“   s
    c          C€  sã   x4 t  i ƒ  p& t  i ƒ  \ }  } } |  | | Ž  q Wt i ƒ  } | op t i ƒ  } | i | j oP t | ƒ t t i	 ƒ  ƒ } x1 | D]% } | i | j o t | ƒ q‰ Pq‰ Wqº n t i ƒ  o t  i ƒ  o t
 ƒ  n d S(   s#   
    Internal use recommended.
    N(   R4   R'   t   getR.   R   R*   R   RB   t   listR   RA   (   R6   R7   R   t   firstt   nowt   taskst   task(    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pyR>       s     
 (    (    (    (   t   __doc__t
   __future__R    R(   t   psycot   fullR*   t   QueueR   R   R4   R   R9   R?   R:   R,   R   R.   R   R0   R1   R2   R3   R8   R-   RA   RB   R>   (    (    (    sQ   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/gamethread.pys   <module>   s,   
1							