ó
'2iOc           @   s}  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 m Z d d l m Z d d l	 Td d l
 Td d l m Z e d ƒ Z e d ƒ Z e d	 ƒ Z d
 „  Z d „  Z d d4 d „  ƒ  YZ d e f d „  ƒ  YZ d d5 d „  ƒ  YZ d e f d „  ƒ  YZ d d6 d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d k rye e j  ƒ d k  r˜e ƒ  n  e j  d  Z! e! d! k rÁe e j  ƒ d" k  rÐe ƒ  n  e e j  d ƒ \ Z" Z# e j  d" Z$ d# Z% g  Z& xš e% e e j  ƒ k  rže j  e% Z' e e' ƒ d$ k r„e' d$ j( ƒ  r„e e' d% ƒ rne& j) e* e' ƒ ƒ q‘e& j) e+ e' ƒ ƒ n e& j) e' ƒ e% d  7Z% qWe e# e" ƒ Z, e, j- e$ e& ƒ qye! d& k re e j  ƒ d" k  rìe ƒ  n  e. Z/ e e j  d ƒ qye! d' k rKe e j  ƒ d" k  r1e ƒ  n  e0 Z/ e e j  d ƒ qye! d( k rÝe j ƒ  a1 e e j  d ƒ \ Z" Z# e j  d" Z2 d) Ge# Gd* Ge" Gd+ Ge2 GHe3 e2 d, ƒ Z4 e e# e" ƒ Z5 e5 j6 e e4 ƒ e d- ƒ qye! d. k rfg  Z& e e j  ƒ d# k  re ƒ  n  e e j  d ƒ \ Z" Z# e j  d" Z7 e3 e7 ƒ Z8 e e# e" ƒ Z, e j ƒ  a1 xû e8 j9 ƒ  Z: e: stPn  e: d$ d/ k rŠq^n  e j; j< d0 e: ƒ e= e: ƒ Z> e> d$ Z? x' e j ƒ  t1 e? k  rÝe j d1 ƒ q·We@ ƒ  ZA e e> ƒ Z% xS eB d  e% ƒ D]B ZC e> eC ZD e j; j< d2 eE eD ƒ ƒ eF eA eD d$ eD d ƒ qWe, jG eA ƒ q^e8 jH ƒ  qyd3 e! GHe ƒ  n  d S(7   s4   
This module provides event support for Osc things.
iÿÿÿÿN(   t
   format_exc(   t   Thread(   t   *(   t   sleepiÀ   iÛ   iÝ   c         C   sË   |  d } | t  k r" t d ‚ n  d } t |  ƒ } xŠ | | k  rÀ |  j t  | ƒ } | d k  rk d |  f S| d k r› |  | d t k r› | d } q7 n  |  | d } |  d | !} | | f SWd |  f S(   Ni    s4   In nextSLIPMsg, data did not begin/end with SLIP_ENDi   t    (   t   SLIP_ENDt	   Exceptiont   lent   findt   SLIP_ESC(   t   datat   firstt   sofart   datalengt   it   restt   b(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   nextSLIPMsg   s     

 
c         C   s>   |  j  t t t ƒ }  |  j  t t t ƒ }  t |  t } | S(   N(   t   replaceR	   t	   SLIP_ESC2R   (   R   t   final(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt
   encodeSLIP0   s    t	   BaseEventc           B   s   e  Z d  „  Z RS(   c         C   s   d |  _  d  S(   Ng        (   t   time(   t   self(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   __init__8   s    (   t   __name__t
   __module__R   (    (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR   7   s   t   OscEventc           B   s2   e  Z d  d d „ Z d „  Z d „  Z d „  Z RS(   g        t	   undefinedc         C   s#   t  j |  ƒ | |  _ | |  _ d  S(   N(   R   R   t   oscmsgt	   source_ip(   R   t   msgt   tmR   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR   =   s    	c         C   s
   |  j  ƒ  S(   N(   t   to_xml(   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   __str__B   s    c         C   s   d |  j  |  j f S(   Ns   <event time=%.3f>%s</event>(   R   R   (   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR"   E   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   to_oscH   s    (   R   R   R   R#   R"   R$   (    (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR   ;   s   		t   OscRecipientc           B   sP   e  Z d  d d „ Z d „  Z d „  Z g  d „ Z d „  Z d „  Z d „  Z	 RS(	   t   udpc         C   sy   | |  _  t | ƒ |  _ | |  _ | |  _ | d k rT t j t j t j ƒ |  _ n! | d k rl t	 |  _
 n	 t d ‚ d  S(   NR&   t   tcps&   Unexpected proto value in OscRecipient(   t   osc_hostt   intt   osc_portt   protot   initfunct   sockett   AF_INETt
   SOCK_DGRAMt
   osc_sockett   Falset	   connectedt   RuntimeError(   R   t   hostt   portR+   R,   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR   L   s    			c         C   s#   |  j  j ƒ  d  |  _  t |  _ d  S(   N(   R0   t   closet   NoneR1   R2   (   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR6   X   s    	c         C   s2   | j  ƒ  } |  j j | j |  j |  j f ƒ d  S(   N(   t	   getBinaryR0   t   sendtot   messageR(   R*   (   R   R   t   bin(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt
   sendbundle]   s    c         C   s   |  j  d k r. t | | ƒ } |  j | ƒ n] |  j  d k r‚ y, t | | ƒ } t | ƒ } |  j | ƒ Wq‹ d t ƒ  GHq‹ Xn	 t d ‚ d  S(   NR&   R'   s   Error in sendosc=%ss0   Unexpected proto value in OscRecipient.sendosc()(   R+   t   createBinaryMsgt
   sendbinaryR   R    R3   (   R   t   oscaddrR   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   sendosca   s    c         C   s   t  d ‚ d  S(   Ns    OscRecipient.sendto is obsolete!(   R3   (   R   R   t   addrport(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR9   q   s    c         C   sù   |  j  d k r1 |  j j | |  j |  j f ƒ nÄ |  j  d k rì |  j sÜ t j t j t j ƒ |  _ |  j |  j f } y9 |  j j	 | ƒ t
 |  _ |  j d  k r® |  j ƒ  n  WqÜ t d |  j |  j t ƒ  f ‚ d  SXn  |  j | ƒ n	 t d ‚ d  S(   NR&   R'   s   Unable to connect to %s:%d - %ss3   Unexpected proto value in OscRecipient.sendbinary()(   R+   R0   R9   R(   R*   R2   R-   R.   t   SOCK_STREAMt   connectt   TrueR,   R7   R3   R    t   send_stream(   R   R   t   hostport(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR>   t   s     "		c         C   sa   t  | ƒ } d } xH | | k  r\ |  j j | | ƒ } | d k rO t d ‚ n  | | } q Wd  S(   Ni    s   socket connection broken(   R   R0   t   sendR3   (   R   R    t   msglent	   totalsentt   sent(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRE   Š   s    N(
   R   R   R7   R   R6   R<   R@   R9   R>   RE   (    (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR%   K   s   				t   OscRecipientRestartablec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s,   t  j |  | | d | d | ƒ| |  _ d  S(   NR+   R,   (   R%   R   R,   (   R   t   addrR5   R+   R,   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR   •   s    c         C   s¡   y t  j |  | | ƒ Wnƒ |  j d k r? t d t ƒ  ‚ n  d |  j |  j f GH|  j ƒ  y t  j |  | | ƒ d GHWq d GHt d t ƒ  ‚ q Xn Xd  S(   NR&   s   Exception: s    Retrying TCP connection to %d@%ss   Retry worked!s   Retry failed...(   R%   R@   R+   R3   R    R*   R(   R6   (   R   t   msg_addrt   msg_data(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR@   ™   s    
	(   R   R   R   R@   (    (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRK   “   s   	t
   OscMonitorc           B   s2   e  Z d  d „ Z d „  Z d „  Z d d „ Z RS(   R&   c         C   sM   | d k r$ | d k r$ t  d ‚ n  t | | d | ƒ|  _ |  j j ƒ  d  S(   NR&   R'   s   Unexpected proto in OscMonitorR+   (   R3   t	   OscThreadt   threadt   start(   R   RL   R5   R+   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR   ª   s    c         C   s   |  j  j ƒ  S(   N(   RQ   t   getport(   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRS   ±   s    c         C   s
   t  j  ƒ  S(   N(   R   (   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   time_now´   s    c         C   s   |  j  j | | ƒ S(   N(   RQ   t   setcallback(   R   t   fR
   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRU   ·   s    N(   R   R   R   RS   RT   R7   RU   (    (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRO   ¨   s   		RP   c           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s;  t  j |  ƒ | |  _ t | ƒ |  _ | |  _ |  j t ƒ d  |  _	 d  |  _
 | d k r“ t j t j t j ƒ |  _ |  j j |  j |  j f ƒ nv | d k r t j t j t j ƒ |  _ |  j j |  j |  j f ƒ d G|  j Gd G|  j GH|  j j d ƒ n	 t d ‚ |  j d k r7|  j j ƒ  } | d |  _ n  d  S(	   NR&   R'   s%   CALLING listen(100) on sock for host=s    port=id   s   Unexpected proto in OscThreadi    i   (   R   R   R4   R)   R5   R+   t	   setDaemonRD   R7   t   callback_funct   callback_dataR-   R.   R/   t   sockt   bindRB   t   listenR3   t   getsockname(   R   R4   R5   R+   t   sockname(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR   ¼   s&    					c         C   s   |  j  S(   N(   R5   (   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRS   Ö   s    c         C   s   | |  _  | |  _ d  S(   N(   RX   RY   (   R   RV   R
   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRU   Ù   s    	c         C   sU   y; |  j  d  k r: t | d | ƒ} |  j  | |  j ƒ n  Wn d t ƒ  GHn Xd  S(   NR   s%   Error in callback on OSC message - %s(   RX   R7   R   RY   R    (   R   t   tt   fromhostt   e(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt
   docallbackÝ   s    c         C   sÍ   d G|  j  Gd G|  j Gd G|  j GHd } xž t rÈ |  j d k rƒ |  j j | ƒ } t | d ƒ } | d d } |  j | | ƒ q+ |  j j ƒ  \ } } y |  j	 | | | ƒ Wq+ d t
 ƒ  GHq+ Xq+ Wd  S(	   Ns   Listening for OSC on host =s    port =s	    proto = i    R&   i    i   s#   Error in handle_tcp_connection - %s(   R4   R5   R+   RD   RZ   t   recvfromt	   decodeOSCRb   t   acceptt   handle_tcp_connectionR    (   R   t   recvsizet   pairR_   R`   t   conn(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   runå   s    "	c         C   sš   t  | ƒ } x‡ t d | ƒ D]v } | | t k r | | d t k r d G| GH| | d k  r„ | | d t k r„ | | d } n
 | | } Pq q W| S(   Ni   s!   FOUND SLIP_END (next start) at n=(   R   t   rangeR   R	   (   R   t   bufft   bufflengt   n(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   findnextstartù   s    $	$
c   
      C   sd  d } g  } yý xö t  r| j | ƒ } t | ƒ d k r= Pn  | | 7} | d t k rn d GH|  j | ƒ } n  x“ t | ƒ d k r| d t k rt | ƒ \ } } t | ƒ d k r» Pn  | j t t t ƒ } | j t t t ƒ } t	 | ƒ } | j
 | ƒ qq Wq WWn d t ƒ  GHn X| j ƒ  x4 t t | ƒ ƒ D]  }	 | |	 } |  j | | ƒ q<Wd  S(   NR   i    sE   HEY! buffer doesn't begin with END, scanning for non-escaped SLIP_ENDi   s    Error in handling connection: %s(   RD   t   recvR   R   Ro   R   R   R	   R   Rd   t   appendR    R6   Rk   Rb   (
   R   Ri   R`   Rg   Rl   t   tlistR
   R   R_   R   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRf     s2    	
%

(	   R   R   R   RS   RU   Rb   Rj   Ro   Rf   (    (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyRP   º   s   						c         C   s#   d g  | D] } | |  k ^ q
 k S(   Ni   (    (   t   strt   sett   c(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   containsAny'  s    c           C   s/   d GHd GHd GHd GHd GHd GHt  j d ƒ d  S(   NR   s   Usage:s8           oscutil {send} {port@host} {msg_addr} {msg_args}s$           oscutil {listen} {port@host}s1           oscutil {record} {port@host} {outputfile}s2           oscutil {playback} {port@host} {inputfile}i   (   t   syst   exit(    (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   usage*  s    c         C   s   |  j  GHd  S(   N(   R   (   t   evt   d(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   listencallback3  s    c         C   sP   t  |  ƒ \ } } d G| Gd G| GHt | | ƒ } | j t d ƒ t d ƒ d  S(   Ns   Listening on host=s    port=R   i   i  i€Q (   t   unpackporthostRO   RU   R|   R   (   t   porthostR5   R4   t   oscmon(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   dolisten6  s
    c         C   sr   |  j  d ƒ d k  r$ |  } d } nD t j d ƒ j |  ƒ j ƒ  d  } t j d ƒ j |  ƒ j ƒ  d } | | f S(   Nt   @i    s	   127.0.0.1s   .*@iÿÿÿÿs   @.*i   (   R   t   ret   compilet   searcht   group(   R~   R5   R4   (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyR}   =  s    	""c         C   s]   t  j  ƒ  t } d | } x% |  j D] } | d t | ƒ } q$ W| d } | j | ƒ d  S(   Ns   [%.6ft   ,s   ]
(   R   t   time0R   Rs   t   write(   Rz   t   outfileR!   t   linet   m(    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   recordcallbackF  s    

t   __main__i   i   RG   i   i   i    t   .R\   t	   listenallt   records   host=s    port=s    outputfile=t   wi  t   playbackt   [s
   SENDING %sgü©ñÒMbP?s   M = s   Unrecognized command: (    (    (    (I   t   __doc__R   R-   t	   tracebackR‚   Rw   R    t	   threadingR   t
   osc.oscAPIt   osc.OSCR   t   chrR   R	   R   R   R   R   R   R%   RK   RO   RP   Rv   Ry   R|   R€   R}   RŒ   R   R   t   argvt   commandR5   R4   R?   Rn   R   t   st   isdigitRq   t   floatR)   t   rR@   R1   t	   showaliveRD   R‡   t   output_namet   openR‰   R   RU   t   filenameRV   t   readlineRŠ   t   stdoutRˆ   t   evalt	   oscbundleR!   t   createBundlet   bundleRk   R   R‹   Rs   t   appendToBundleR<   R6   (    (    (    sB   C:/local/Pyffle_1_5/Binaries/win32/Pyffle/python\nosuch\oscutil.pyt   <module>   sÂ   

		Hm									

"



	
	